【问题标题】:MainActivity.this call, in FragmentMainActivity.this 调用,在 Fragment 中
【发布时间】:2018-07-18 11:42:50
【问题描述】:

我是安卓新手。我有一个由 ViewPager 和 TabLayout 组成的代码。它有4个片段。在我的 Fragment4 代码中,我想使用我在 GitHub 中获得的 CircleProgressView。要使用该代码,我应该使用 AsyncTask。它有“MainActivity.this.runOnUiThread(new Runnable){}”。但是这段代码发生了错误。消息是“MainActivity 不是封闭类”。我认为这意味着无法引用 MainActivity 类。如何调用“MainActivity.this.runOnUiThread()”?请告诉我如何修复代码。

这是我的代码的一部分。

public class Fragment4 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment4, container, false);

    ...

    return rootView;

    }

    @Override
    public void onStart() {
        super.onStart();
    }

    private class LongOperation extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {

            MainActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mCircleView.setValue(0);
                    mCircleView.spin();
                }
            });

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            mCircleView.setValueAnimated(42);
        }
    }
}

【问题讨论】:

    标签: android multithreading android-activity fragment this


    【解决方案1】:

    MainActivity.this 只是获取 Activity 上下文的一种方式,但还有多种其他方式可以获取此上下文。

    1. 使用getActivity() 从当前活动中获取上下文
    2. 使用getApplicationContext(),这是一个不同的上下文,对所有活动都相同,但也应该在这里工作。
    3. 如果您使用 API 23 或更高版本,则可以在 Fragment 中使用 getContext() 来获取当前上下文。

    【讨论】:

      【解决方案2】:

      使用getActivity() 代替MainActivity.this

       getActivity().runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                          mCircleView.setValue(0);
                          mCircleView.spin();
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多