gpt4 book ai didi

java - 使用 PreferenceFragment 绑定(bind)自定义首选项

转载 作者:太空狗 更新时间:2023-10-29 16:05:28 25 4
gpt4 key购买 nike

嗨!

我有一个扩展 DialogPreference 的自定义首选项类。我需要将它与我的 PreferenceFragment 类绑定(bind)(我从这里得到它:http://stackoverflow.com/questions/5533078/timepicker-in-preferencescreen)。如何实现?我是否需要在我的 preferences.xml 布局文件中声明自定义 DialogPrefrence?

这是 DialogPreference 类:

public class TimePreference extends DialogPreference {
private int lastHour=0;
private int lastMinute=0;
private TimePicker picker=null;

public static int getHour(String time) {
String[] pieces=time.split(":");

return(Integer.parseInt(pieces[0]));
}

public static int getMinute(String time) {
String[] pieces=time.split(":");

return(Integer.parseInt(pieces[1]));
}

public TimePreference(Context ctxt) {
this(ctxt, null);
}

public TimePreference(Context ctxt, AttributeSet attrs) {
this(ctxt, attrs, 0);
}

public TimePreference(Context ctxt, AttributeSet attrs, int defStyle) {
super(ctxt, attrs, defStyle);

setPositiveButtonText("Set");
setNegativeButtonText("Cancel");
}

@Override
protected View onCreateDialogView() {
picker=new TimePicker(getContext());

return(picker);
}

@Override
protected void onBindDialogView(View v) {
super.onBindDialogView(v);

picker.setCurrentHour(lastHour);
picker.setCurrentMinute(lastMinute);
}

@Override
protected void onDialogClosed(boolean positiveResult) {
super.onDialogClosed(positiveResult);

if (positiveResult) {
lastHour=picker.getCurrentHour();
lastMinute=picker.getCurrentMinute();

String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);

if (callChangeListener(time)) {
persistString(time);
}
}
}

@Override
protected Object onGetDefaultValue(TypedArray a, int index) {
return(a.getString(index));
}

@Override
protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
String time=null;

if (restoreValue) {
if (defaultValue==null) {
time=getPersistedString("00:00");
}
else {
time=getPersistedString(defaultValue.toString());
}
}
else {
time=defaultValue.toString();
}

lastHour=getHour(time);
lastMinute=getMinute(time);
}
}

非常感谢!

最佳答案

在首选项 fragment 中,您需要从预定义的 xml 加载首选项:

public static class MyPreferenceFragment extends PreferenceFragment {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}

在您的 preferences.xml 中使用自定义首选项对话框,如果它是自定义 View ,则以相同的方式:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<com.example.TimePreference
android:key="prefKey"
android:defaultValue="00:00"
android:summary="@string/pref_summary"
android:title="@string/pref_title" />

</PreferenceScreen>

关于java - 使用 PreferenceFragment 绑定(bind)自定义首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16404827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com