我有自己的自定义 Content Provider,它加载一个数据库,其中包含我的应用程序的设置信息。
我在创 build 置 Activity 时从 ContentProvider 加载设置。
我的设置 Activity 由 PreferenceScreen 和基于 EditText 的对话框组成。
以下代码显示了我如何使用首选项屏幕和编辑文本。
因此,正如您从第一张图片中看到的那样,它可以正常工作并显示带有下方信息的菜单。
问题在图二中,当我点击菜单中的一个选项时,对话框弹出但它是空的,我希望能够将数据从我的内容提供者加载到对话框中的编辑文本中,所以在图片一中它显示“Donal”作为用户名所以在图片二中“Donal”也应该出现在对话框的编辑文本中。
我还希望能够听到对话框中的“确定”按钮,这样当用户更改设置时我可以更新我的内容提供程序中的数据。
任何人都可以帮助我完成我正在尝试做的事情吗?
代码
public class PreferencesApp extends PreferenceActivity {
String name;
EditTextListener etl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadSettingsFromProvider();
etl = new EditTextListener(this);
setPreferenceScreen(createPreferenceHierarchy());
}
private PreferenceScreen createPreferenceHierarchy() {
// Root
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
// Dialog based preferences
PreferenceCategory dialogBasedPrefCat = new PreferenceCategory(this);
dialogBasedPrefCat.setTitle(R.string.dialog_based_preferences);
root.addPreference(dialogBasedPrefCat);
// Edit text preference
EditTextPreference editTextPref = new EditTextPreference(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);
return root;
}
public class EditTextListener extends EditTextPreference{
public EditTextListener(Context context){
super(context);
}
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
Log.d("DIALOG CLOSED", "OK");
}
else {
// cancel hit
Log.d("DIALOG CLOSED", "CANCEL");
}
}
}
最佳答案
在 Documentation 中查找可用的方法.
可以订阅onDialogClosed
获取确定或取消点击事件。 罢工>
另请查看 getEditText
将返回对话框的编辑文本的方法,您可以在那里设置值。或者甚至查看 setText
,你也许可以用它来设置值。这后来未经我测试。
编辑 1
抱歉,您无法订阅。您必须子类化 EditTextPreference
并覆盖该方法。一个复杂的例子是 here但你不需要所有你感兴趣的东西:
@Override
//When the dialog is closed, perform the relevant actions
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String text=getEditText().getText().toString();
}
else {
// cancel hit
}
}
编辑 2
你必须放弃
etl = new EditTextListener(this);
你必须实现你的新类
EditTextPreference editTextPref = new EditTextListener(this);
所以代码会变成
// Edit text preference
EditTextPreference editTextPref = new EditTextListener(this);
editTextPref.setDialogTitle(R.string.dialog_title_edittext_preference);
editTextPref.setKey("edittext_preference");
editTextPref.setTitle(R.string.title_edittext_preference);
editTextPref.setSummary(name);
dialogBasedPrefCat.addPreference(editTextPref);
关于Android - 使用 PreferenceScreen 显示和保存设置到/从 ContentProvider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2507322/