我已经看到过两种方式,最常见的是带有参数并将其传递给这个SO答案中提到的
Android passing object to fragment
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);
}
我不记得在哪里,但我也看到了另一种在我看来更优化的模式,因为它不需要任何捆绑。你能找到一个理由说明为什么我不应该使用这种模式吗?
public static ConversationFragment newInstance(ArrayList<Message> _extractedMessages){
ConversationFragment fragment = new ConversationFragment();
fragment.myData = _extractedMessages;
return fragment;
}
ArrayList<Message> myData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
答案 0 :(得分:3)
setArguments(Bundle bundle)
:
提供此片段的构造参数。这只能是 在片段附加到其活动之前调用;那是, 你应该在构造片段后立即调用它。的的 这里提供的参数将保留在片段destroy和 创建强>
因此,如果您的片段被Android销毁并重新创建(由于某种原因),如果您使用setArguments(),您将能够保留您的数据。
答案 1 :(得分:0)
变量的名称,告知您正在尝试为ConversationFragment
提供消息列表。第一种方法是将大量数据捆绑在一起是个坏主意。 (因为束大小限制为500k(或1Mb))。我建议您从ConversationFragment
本身的数据源(通常是数据库)中提取数据。如果您使用数据库,强烈建议使用ContentProvider与CursorLoader非常好,特别是您要将数据加载到listview中。但是一开始使用ContentProvider
有点棘手。