所以我对Android编程很新,并想知道如何将一个歌曲的索引从图书馆Fragment
发送到播放器Fragment
,然后使用该索引自动播放歌曲。到目前为止,使用我的代码,单击ListItem
时没有任何反应。我的意思是什么。它甚至没有按预期发生在我身上。这是代码......
LibraryFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_library, container, false);
songView = (ListView)rootView.findViewById(R.id.song_list);
songList = new ArrayList<>();
getSongList();
Collections.sort(songList, new Comparator<Song>() {
public int compare(Song a, Song b) {
return a.getTitle().compareTo(b.getTitle());
}
});
songView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Getting list item index
int songIndex = position;
// Starting new intent
Intent in = new Intent(getActivity().getApplicationContext(), LibraryFragment.class);
// Sending songIndex to Player Fragment
in.putExtra("songIndex", songIndex);
getActivity().setResult(100, in);
}
});
SongAdapter songAdt = new SongAdapter(getActivity(), songList);
songView.setAdapter(songAdt);
return rootView;
}
PlayerFragment
@Override
public void onActivityResult(int requestCode,
int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == 100){
currentSongIndex = data.getExtras().getInt("songIndex");
playSong(currentSongIndex);
}
}
任何帮助都将非常感谢!干杯!
答案 0 :(得分:0)
您不能对片段使用Intents,它们无法启动。
您还认为getActivity().setResult(100, in);
的作用是什么?你肯定使用了那个错误。
请阅读有关片段通信的official documentation。
详细
LibraryFragment
需要定义一个界面,例如 public interface LibraryListener {
void onIndexSelected(int index)
}
您的活动必须实现此界面。在这个实现中,它必须将索引传递给PlayerFragment
,它应该定义一个公共方法来做到这一点。
现在,您的LibraryFragment可以拨打((LibraryListener)getActivity()).onIndexSelected(index);