如何从内部 AsyncTask 访问片段

how to access a Fragment from the inner AsyncTask

我有一个 Fragment 和加载文本的内部 AsyncTask:

public class TextReaderFragment extends Fragment {
    LoadTextTask task = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        setRetainInstance(true);

        task=new LoadTextTask();
        task.execute();
        ...
    }

    public void renderText() {
        ...
    }

    class LoadTextTask extends AsyncTask<Integer, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            // how to access Fragment or Activity here?
            ProgressBar loader = (ProgressBar) findViewById(R.id.textLoadingProgressBar);
            loader.setVisibility(TextView.VISIBLE);
        }

        @Override
        protected void onPostExecute(Boolean loaded) {
            // how to trigger renderText method defined on TextReaderFragment?
            loader.setVisibility(TextView.GONE);
        }

我不明白我怎么能:

  1. onPreExecute() 方法访问 FragmentActivity 以获取 FragmentActivity[=28= 中定义的 UI 小部件]
  2. 触发 renderText() 中定义的方法 TextReaderFragment from onPostExecute()?

逐点回答:

  • Fragment 可以访问为 TextReaderFragment.this
  • Activity 可以访问为 (MyActivity)getActivity()
  • renderText() 可以使用 TextReaderFragment.this.renderText().
  • 调用

因为您没有声明您的 AsyncTask static,所以它隐含地引用了它所包含的 class。要引用封闭 class 的实例,您必须使用带有 this 关键字的完全限定 class 名称,或者在您的情况下为 TextReaderFragment.this

有关嵌套 class 的工作原理的更详细说明,请参阅 this 教程。