我正在构建在设置活动中具有首选项的应用程序。有两组首选项,一组用于应用程序设置,另一组用于用户设置,应与远程Web服务器同步。
一个首选项表示为一个按钮,该按钮正在运行AsyncTask
,将数据发送到后端:
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/save_btn"
android:layout_width="fill_parent"
android:layout_height="80dp"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
android:enabled="true"
android:text="Save Settings" />
我想在AsyncTask运行时部分禁用首选项,然后重新启用它们以进行编辑,当异步任务完成后,我该怎么做?
我的想法是在异步任务中获取活动的上下文,这是正确的方法吗?
public class SavePreferences extends Preference {
// constructor code is skipped
@Override
protected void onBindView(View view) {
super.onBindView(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
(new UpdateFilterTask(v)).execute();
}
});
}
}
和AsyncTask的构造函数:
public UpdateFilterTask(View btn) {
super();
this.button = btn;
rootView = btn.getRootView();
...
}
答案 0 :(得分:0)
在这种情况下,您可以采用多种方法
在AsyncTask的postExecute()回调中使用LocalBroadcastManager发送广播
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(ACTION_NAME));
在您的Activity中注册接收者,以在AsyncTask完成doInBackground()后得到通知。
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// **enable the preferences here**
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(ACTION_NAME));
注意:当您注册接收者以及从AsyncTask广播后,ACTION_NAME应该相同
希望有帮助。