Android Can';在后台线程中加载布局器
我有一个片段,在Android Can';在后台线程中加载布局器,android,android-fragments,android-activity,layout-inflater,Android,Android Fragments,Android Activity,Layout Inflater,我有一个片段,在onCreateView方法中有很多代码,所以我认为将这些代码放在外部线程中是个好主意。现在的问题是,我必须在这个线程中加载一个布局,但是如果我在我的活动的onStart方法中创建这个片段的一个新对象,它会在这一行出现一个NullPointerException: LayoutInflater inflater = getActivity().getLayoutInflater(); 我认为getActivity返回null,但为什么呢?我在onStart方法中创建对象。在那里
onCreateView
方法中有很多代码,所以我认为将这些代码放在外部线程中是个好主意。现在的问题是,我必须在这个线程中加载一个布局,但是如果我在我的活动的onStart
方法中创建这个片段的一个新对象,它会在这一行出现一个NullPointerException:
LayoutInflater inflater = getActivity().getLayoutInflater();
我认为getActivity返回null
,但为什么呢?我在onStart
方法中创建对象。在那里,活动不应该返回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();
//...
}
}
我认为getActivity返回null,但为什么呢
因为片段尚未添加到活动中。事实上,使用如图所示的代码,您的片段永远不会成为活动的一部分,因为您没有通过FragmentTransaction
getActivity()返回当前片段当前关联的活动。请先附上带有活动的片段。
如果onCreateView中有其他代码,则可以使用AsyncTask,并在ui线程中运行结果处理程序onPostExecute。如果onCreateView中的大多数代码都与ui相关,请将其保留在那里。能否发布onStart()方法的代码以及线程?我添加了我的帖子。我也用
onResume()
试过了,但是没有用。哦,是的,你是对的,这是合理的。所以如果我不将布局添加到活动中,我就无法加载布局?或者还有其他方法吗?@Cilenco:“因此,如果我不将版面添加到活动中,我就无法加载版面?”——您需要一个活动来扩大版面。我的建议是你删除所有你用线程做的事情。让你的片段与你的活动正常工作。然后使用Traceview来确定什么是慢的,如果有的话。然后,然后,考虑如何最好地使用线程来处理慢的比特,如果有的话。