1

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

我在创建我的设置活动时从 ContentProvider 加载设置。

我的设置活动由 PreferenceScreen 和基于对话框的 EditText 组成。

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

因此,正如您从第一张图片中看到的那样,它可以工作并显示带有下方信息的菜单。

问题出在图二中,当我单击菜单中的一个选项时,会弹出对话框但它是空的,我希望能够将我的内容提供者中的数据加载到对话框中的编辑文本中,所以在图像中一个它显示“Donal”作为用户名,因此在图像中两个“Donal”也应该出现在对话框的编辑文本中。

我还希望能够听到对话框中的 OK 按钮,这样当用户更改设置时,我可以更新内容提供程序中的数据。

谁能帮我做我想做的事?


代码

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");
        }
    }       
}
4

1 回答 1

1

在文档中查找可用的方法。
您可以订阅以onDialogClosed获取 OK 或 Cancel click 事件。

还要查看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);
于 2010-03-24T11:56:53.567 回答