2

我有一个片段,它在方法中有很多代码,onCreateView所以我认为将此代码放在外部线程中是个好主意。现在的问题是我必须在这个线程中加载一个布局,但是如果我在我onStart的 Activity 方法中创建这个 Fragment 的新对象,它会在这一行出现 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();
        //...
    }
}
4

3 回答 3

3

我认为 getActivity 返回 null 但为什么呢?

因为该片段尚未添加到活动中。实际上,使用所示代码,您的片段将永远不会成为活动的一部分,因为您还没有通过FragmentTransaction.

于 2013-05-20T21:09:50.840 回答
0

getActivity() 返回当前关联的 Activity 当前片段。请先用Activity附加片段。

于 2013-05-20T21:12:27.013 回答
0

不要从 UI 线程外部访问 Android UI 工具包

如果 onCreateView 中有其他代码,则可以使用 AsyncTask 和在 ui 线程中运行的结果处理程序 onPostExecute。如果您在 onCreateView 中的大部分代码都与 ui 相关,则将其保留在那里。

于 2013-05-20T21:14:44.790 回答