如何在AsyncTask中获得临时的禁用偏好设置?

时间:2018-07-03 05:49:45

标签: android

我正在构建在设置活动中具有首选项的应用程序。有两组首选项,一组用于应用程序设置,另一组用于用户设置,应与远程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();
    ...
}

1 个答案:

答案 0 :(得分:0)

在这种情况下,您可以采用多种方法

  1. 在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应该相同

  1. 您还可以在 AsyncTask类中定义接口,并在Activity类中实现它。通过传递引用的Activity从Activity启动AsyncTask,然后在AsyncTask类中,可以将其typeCasted到Interface对象。最后,使用相同的接口对象,您可以在postExecute()回调中调用其方法(在Activity中定义)。

希望有帮助。