在Activity&#39的oncreate方法中调用片段方法

时间:2014-08-19 14:08:41

标签: android android-fragments

我正在尝试从主要活动调用片段方法。但我的应用程序正在崩溃

这是我的代码:

    public class MainActivity extends FragmentActivity implements 
    ActionBar.TabListener,ConversationFragment.OnGetFromUserClickListener {
         ConversationFragment frgObj;
         Hashtable<String, ArrayList<Message>> table = new Hashtable<String, ArrayList<Message>>();

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            addMessageToFragment("test");
    }

public void addMessageToFragment(String message) {
    Log.w("Step 1",message);
    table.put("tolgay", new ArrayList<Message>());
    table.get("tolgay").add(new Message("asda", "asda"));
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    frgObj=ConversationFragment.newInstance(table.get("tolgay"));
    fragmentTransaction.replace(R.id.container, frgObj,"ConversationFragment");
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
    getSupportFragmentManager().executePendingTransactions();
    frgObj.addMessageToList("asd");

}
}

这段代码有什么问题?我想在onc​​reate方法中加载带有一些数据的片段。我该如何修复它?

这里是logcat:http://goo.gl/id4UmY

2 个答案:

答案 0 :(得分:0)

您的NPE就在这一排:

 table.get("tolgay").add(new Message("asda", "asda"));

由于table初始化为非空,因此这里NPE的唯一可能性是table.get("tolgay")返回null。哈希表不包含具有此键的消息。如果不存在,请使用put()插入新密钥。

另请考虑使用HashMap代替Hashtable。在像这样运行在单个线程中的UI代码中,您不需要Hashtable提供的同步。

答案 1 :(得分:0)

我的建议是简单地创建你的片段实例,添加Bundle然后使用 setArguments()方法在片段上设置它。只需确保您设置的数据不为空。

然后在你的片段中(可能在onAttach或onCreate或onActivityCreated方法中,只需使用它:

Bundle bundle = this.getArguments(); 

然后检索之前添加的数据。

我希望这可以帮到你!