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條經驗 獲得超8個贊
我更喜歡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);
...
}
添加回答
舉報