MainActivity.this调用,在Fragment中

오영택*_*오영택 1 multithreading android this fragment android-activity

我是安卓新手。我有一个由 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

vir*_*tum 5

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

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