MainActivity.this 调用,在 Fragment 中
Posted
技术标签:
【中文标题】MainActivity.this 调用,在 Fragment 中【英文标题】:MainActivity.this call, in 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);
【问题讨论】:
【参考方案1】:MainActivity.this
只是获取 Activity 上下文的一种方式,但还有多种其他方式可以获取此上下文。
-
使用
getActivity()
从当前活动中获取上下文
使用getApplicationContext()
,这是一个不同的上下文,对所有活动都相同,但也应该在这里工作。
如果您使用 API 23 或更高版本,则可以在 Fragment 中使用 getContext()
来获取当前上下文。
【讨论】:
【参考方案2】:使用getActivity()
代替MainActivity.this
getActivity().runOnUiThread(new Runnable()
@Override
public void run()
mCircleView.setValue(0);
mCircleView.spin();
);
【讨论】:
以上是关于MainActivity.this 调用,在 Fragment 中的主要内容,如果未能解决你的问题,请参考以下文章