3 回答
TA贡献1824条经验 获得超8个赞
我只需要将此行添加到片段Activity onCreate()方法中(否则getArguments()将返回null):
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, frag).commit();
并将其添加到片段代码中:
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
Bundle bundle = getArguments();
if(bundle != null)
{
listMusics = bundle.getParcelableArrayList("arrayMusic");
listMusic.setAdapter(new MusicBaseAdapter(getActivity(), listMusics));
}
}
其中,listMusics是ArrayList的Parcelable音乐。
TA贡献1895条经验 获得超3个赞
两件事情。首先,我认为您没有正确添加要传递给片段的数据。您需要传递给片段的是捆绑包,而不是意图。例如,如果我想向int片段发送一个值,我将创建一个包,将其int放入该包中,然后将该包设置为创建片段时要使用的参数。
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
其次,要检索该信息,您需要将参数发送到片段。然后,根据您使用其标识的键来提取值。例如在您的片段中:
Bundle bundle = this.getArguments();
if (bundle != null) {
int i = bundle.getInt(key, defaulValue);
}
您得到的改变取决于您放置的内容。同样,默认值通常是null但不是必须的。这取决于您是否为该参数设置默认值。
最后,我认为您无法在中执行此操作onCreateView。我认为您必须在片段的onActivityCreated方法内检索此数据。我的推理如下。onActivityCreated在基础活动完成其自己的onCreate方法之后运行。如果您要在活动onCreate方法期间将要检索的信息放入捆绑包中,则在您的片段期间该信息将不存在onCreateView。尝试在其中使用它,稍后再onActivityCreated更新您的ListView内容。
TA贡献1725条经验 获得超7个赞
我更喜欢Serializable=没有样板代码。对于将数据传递到其他片段或活动,速度差与aParcelable无关紧要。
我还将始终为Fragment或提供帮助方法Activity,这种方式您始终知道必须传递哪些数据。这是您的示例ListMusicFragment:
private static final String EXTRA_MUSIC_LIST = "music_list";
public static ListMusicFragment createInstance(List<Music> music) {
ListMusicFragment fragment = new ListMusicFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(EXTRA_MUSIC_LIST, music);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(...) {
...
Bundle bundle = intent.getArguments();
List<Music> musicList = (List<Music>)bundle.getSerializable(EXTRA_MUSIC_LIST);
...
}
添加回答
举报