[英]Pass Arraylist from fragment to its own Activity
我有一個片段來構建歌曲ArrayList,我想將該ArrayList傳遞給片段的活動。 我知道我可以使用界面,但不確定如何去做
public class SongsListFragment extends Fragment
{
public interface passArrayList {
public void onArticleSelected(Uri articleUri);
// from android guide i don't know what to do
}
}
這是我到目前為止的內容,請讓我知道為什么我正在獲取NullPointer
在MainActivity上
@Override
public void onFragmentSetSongs(ArrayList<Song> songs){
songsArrayList = songs;
}
@Override
public void onSongListItemClick(int position) {
musicService.setSong(position);
Song playSong = songsArrayList.get(position);
txtCurrentSongTitle.setText(playSong.getTitle());
txtCurrentSongTitle.requestFocus();
musicService.playSong();
btnPlayPause.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_pause));
if (playbackPaused) {
playbackPaused = false;
}
//setDownloaded();
}
在片段上
OnFragmentInteractionListener songsCallBack;
OnFragmentInteractionListener songsItemClick;
public interface OnFragmentInteractionListener {
public void onFragmentSetSongs(ArrayList<Song> s);
public void onSongListItemClick(int position);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
songsCallBack = (OnFragmentInteractionListener) getActivity();
songsItemClick = (OnFragmentInteractionListener) getActivity();
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
@Override
public void onDetach() {
super.onDetach();
songsCallBack = null;
songsItemClick= null;
}
listView = (ListView) root.findViewById(R.id.listViewSongs);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
songsItemClick.onSongListItemClick(position);
}
});
在完成構建songArrayList的方法上,我做了
songsCallBack.onFragmentSetSongs(songArrayList);
當我單擊ListView時出現錯誤
at com..activities.MainActivity.onSongListItemClick(MainActivity.java:107)
at com..fragments.SongsListFragment$1.onItemClick(SongsListFragment.java:194)
at android.widget.AdapterView.performItemClick(AdapterView.java:308)
at android.widget.AbsListView.performItemClick(AbsListView.java:1478)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3480)
錯誤位置
musicService.setSong(position); //Main Activity (MainActivity.java:107)
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
songsItemClick.onSongListItemClick(position); < -- here
}
更改接口名稱,使其以大寫字母開頭。 然后在您的活動中將此行添加到活動的聲明中: public class FragmentActivity extends Activity implements PassArrayList
,重寫了接口方法。 並在片段中添加以下內容:
PassArrayList mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallback = (PassArrayList) getActivity();
}
@Override
public void onDetach() {
super.onDetach();
mCallback = null;
}
在代碼中的某個位置,當您要將歌曲列表傳遞回活動時,請調用mCallback
對象上的mCallback
onArticleSelected()
方法,並將此方法傳遞給arraylist。 然后,此數組列表將作為您活動中方法onArticleSelected()
的參數,您可以使用它進行任何所需的操作。 但不要忘記在onDetach()
掛鈎方法中取消指向mCallback的鏈接,以防止上下文泄漏
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.