如何从另一个 activity 或另一个线程触摸 EditTextPrefences

How to touch EditTextPrefences from another activity or another thread

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

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

此方法在设置 activity 中,但从 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 然后传递给方法的设置 activity。

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

抱歉我的英语不好。 提前致谢。

方法一:

如果 activity 仍在后台,将您的 context 传递给 AsyncTask 并创建您的设置实例 Activity.

SettingsActivity settingsActivity = (SettingsActivity) context;

然后,调用onPostExecute()

中的方法
settingsActivity.setNewSetting();

并且,在您的设置Activity 中设置您的 setNewSetting() 方法。它应该是 public 并检查空值。

方法二:

使用接口委托。创建接口:

 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();

方法三

不推荐,但您也可以尝试 startActivityForResult()。并且,收听 onActivityResult() 以应用更改。