android – 如何从另一个活动或另一个线程触摸EditTextPrefences

我有一个设置Activity存储名称,通过更改它必须首先发送到我的服务器的名称,如果它在服务器中的存储成功,那么它应该在我的EditTextPreference的摘要中设置.

一切正常,但最后我无法触摸EditTextPreference来设置它的名称.

此方法用于设置活动,但是从AsyncTask的onPostExecute调用

  public void setNewSetting(Activity activity) {
    EditTextPreference editTextPreference = (EditTextPreference) UserSettingActivity.this.findPreference(activity.getString(R.string.pref_name_key));
    name = sharedPreferences.getString(activity.getString(R.string.pref_name_key), "");
    editTextPreference.setSummary(name);
}

activity是我传递给AsyncTask然后传递给方法的设置活动.

我的问题在这里,给我一个EditTextPreferences的nullPoiterException

对不起,我的英语不好.
并提前感谢.

解决方法:

方法1:

如果活动仍在后台,请将您的上下文传递给AsyncTask并创建Settings Activity的实例.

SettingsActivity settingsActivity = (SettingsActivity) context;

然后,在onPostExecute()中调用该方法

settingsActivity.setNewSetting();

并且,在SettingsActivity中使用setNewSetting()方法.它应该是公共的并对空值进行一些检查.

方法2:

使用接口委托.创建一个界面:

 public interface TaskListener {
        void onComplete();
    } 

执行时将其传递给AsyncTask,例如:

new MyAsyncTask(params, params, new TaskListener() {

    @Override
    public void onComplete () {

        // call setNewSetting from within SettingsActivity
    }

}).execute();

你可以在你的AsyncTask构造函数中得到它:

public MyAsyncTask (String params, String param2, TaskListener taskListenerDelegate) {

    this.taskListenerDelegate = taskListenerDelegate;
}

在onPostExecute()中调用它的onComplete():

taskListenerDelegate.onComplete();

方法3

不推荐,但您也可以尝试使用startActivityForResult().并且,在onActivityResult()中监听以应用更改.

上一篇:android共享首选项高分的例子?


下一篇:Android:点击了首选项按钮?