我有一个片段,它在onCreateView
方法中有很多代码,所以我认为将这段代码放在外部线程中是一个好主意。现在的问题是我必须在这个线程中加载一个布局,但是如果我在我的Activity的onStart
方法中创建了这个Fragment的一个新对象,那么在这一行会出现一个NullPointerException:
LayoutInflater inflater = getActivity().getLayoutInflater();
我认为getActivity会返回null
,但为什么呢?我在onStart
方法中创建了Object。活动不应该返回null
或者我的思考有什么问题?我的代码:
MyFragment f;
public class Tablet extends FragmentActivity
{
// onCreate(), Variables and so on...
@Override
protected void onStart()
{
super.onStart();
f = new MyFragment();
}
}
public class StundenAnsicht extends Fragment implements Runnable
{
public MyFragment()
{
Thread t = new Thread(this);
t.start();
}
@Override
public void run()
{
LayoutInflater inflater = getActivity().getLayoutInflater();
//...
}
}
答案 0 :(得分:3)
我认为getActivity会返回null,但为什么呢?
因为片段尚未添加到活动中。事实上,使用您显示的代码,您的片段永远不会成为活动的一部分,因为您尚未通过FragmentTransaction
将其添加到活动中。
答案 1 :(得分:0)
getActivity()返回当前与之关联的Activity当前片段。请先将片段附加到Activity。
答案 2 :(得分:0)
Do not access the Android UI toolkit from outside the UI thread
如果在onCreateView中有其他代码,则可以在ui线程中使用AsyncTask和onPostExecute运行结果处理程序。如果onCreateView中的大多数代码都与ui相关,那就把它留在那里。