我有自己的自定义内容提供商,该提供商加载一个数据库,其中包含我应用程序的设置信息。

我从ContentProvider上加载设置,以创建设置活动。

我的设置活动由基于偏好的屏幕和对话框组成。

以下代码显示了我如何使用首选项屏幕和编辑文本。

因此,您可以从第一个图像中看到,并显示下面的信息。

问题在图像中,当我单击菜单中的选择时,对话框弹出,但它是空的,我希望能够将内容提供商中的数据加载到对话框中的编辑文本中,因此在图像中它显示“ 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");
        }
    }       
}
有帮助吗?

解决方案

查找中可用的方法 文档.
您可以订阅 onDialogClosed 要获得确定或取消单击事件。

也看 getEditText 将返回对话框的可疑的方法,您可以在此设置值。甚至看 setText, ,您可能可以用它设置值。后来我没有受到我的测试。

编辑1

抱歉,您无法订阅。你必须子类 EditTextPreference 并覆盖该方法。一个复杂的例子是 这里 但是您不需要所有对此感兴趣的东西:

@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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top