我有一个消息类
class Message
{
public String message, sender;
public Message (String msg, String from)
{
message = msg;
sender = from;
}
public String toString () { return sender+":"+message; }
}
我在主要活动中定义了一个用于使用此类的表变量:
Hashtable<String, ArrayList<Message>> table = new Hashtable<String, ArrayList<Message>>();
我使用以下代码将主活动中的数据添加到邮件类:
table.put("user01", new ArrayList<Message>());
table.get("user01").add(new Message("message","sender"));
我想在另一个片段中使用这个表变量。我将这段代码传递给片段。
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ConversationFragment conv = new ConversationFragment();
fragmentTransaction.add(R.id.container, conv);
ConversationFragment frgObj=ConversationFragment.newInstance(table.get("user01"));
fragmentTransaction.replace(R.id.container, frgObj,"ConversationFragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
这是Conversation片段中的newInstance函数
static int myData;
public static ConversationFragment newInstance(ArrayList<Message> _extractedMessages){
ConversationFragment fragment = new ConversationFragment();
myData=_extractedMessages.size();
return fragment;
}
但是我得到了null指针异常,对于_extractedMessages.size()。
此代码正常运行
System.out.println(_extractedMessages);
但这不起作用
System.out.println(_extractedMessages.size());
Ps:我可以在主要活动中使用大小功能,我只能在会话片段中使用。
我该如何解决?
答案 0 :(得分:0)
通常,您将参数传递给Bundle 中的片段(并确保Message类实现Parcelable):
public static ConversationFragment newInstance(ArrayList<Message> _extractedMessages){
ConversationFragment fragment = new ConversationFragment();
Bundle bundle = new Bundle();
bundle.putParcelable(KEY_MESSAGES, _extractedMessages);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myData = getArguments().getParcelable(KEY_MESSAGES);
}