Android将对象传递给片段

时间:2014-08-14 19:23:17

标签: android android-fragments

我有一个消息类

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:我可以在主要活动中使用大小功能,我只能在会话片段中使用。

我该如何解决?

1 个答案:

答案 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);
}