MainActivity.this调用,在Fragment中

时间:2018-02-08 02:17:42

标签: android multithreading android-activity fragment this

我是android的新手。我有一个由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);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

使用getActivity()代替MainActivity.this

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