无法在后台线程中加载LayoutInflater

时间:2013-05-20 20:56:40

标签: android android-fragments android-activity layout-inflater

我有一个片段,它在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();
        //...
    }
}

3 个答案:

答案 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相关,那就把它留在那里。