1

個人的なビューでいっぱいのリストビューがあります。アイテムを長押ししたときにメニューを作成したい。したがって、私はこれを 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;
    [...]

この関数では、「 clickedMusic = currentList.getSong(lastOnLongClickedPos).getPath();」という行があるため、currentList は空に見えます。nullpointer 例外が発生します。私はすでに lastOnLongClickedPos をテストしましたが、問題ありません。実際、私の currentList はこれら 2 つの関数で異なっており、その理由は本当にわかりません! 何かアイデアはありますか?:バツ

4

0 に答える 0