我有一个充满个人观点的列表视图。当我长按一个项目时,我想创建一个菜单。因此我在 onCreate 中有这个:
myListView.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener(){
public void onCreateContextMenu(ContextMenu cMenu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.song_menu, cMenu);
}});
myListView.setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> a, View v, int pos, long id) {
lastOnLongClickedPos = pos;
Log.v("test pos", currentList.getSong(lastOnLongClickedPos).getTitle());
return false;
}
});
getSong 用于获取 SongContainer 的实例(具有标题、路径、艺术家等的类)。现在一切都很好,我确实根据位置得到了歌曲。
当我想要执行特定操作(阅读歌曲、添加到播放列表等)时,就会出现问题。我在课堂上有这段代码(在onCreate之外):
public boolean onContextItemSelected(MenuItem item) {
final String clickedMusic;
Uri uriSong;
switch(item.getItemId()) {
case R.id.songlist_play :
clickedMusic = currentList.getSong(lastOnLongClickedPos).getPath();
uriSong = Uri.parse("file://" + clickedMusic);
// send uri to player
return true;
[...]
在这个函数中,currentList 似乎是空的,因为行“clickedMusic = currentList.getSong(lastOnLongClickedPos).getPath();” 让我得到一个空指针异常。我已经测试过 lastOnLongClickedPos 并且没关系。所以事实是我的 currentList 在这两个函数中是不同的,我真的不知道为什么!有什么想法吗?:X