0

現在SDカードにあるファイルを表示するリストビューがあります。ファイルを長押しすると、コンテキスト メニューが表示されます。

私の質問は: リストからファイルを削除するために、選択した項目をコンテキスト メニューに渡すにはどうすればよいですか? また、これを使用して SD カードからファイルを削除することもできますか? 私のコードは次のとおりです。

    public class PlayListActivity extends ListActivity {
// Songs list
public ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playlist);

    ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();

    SongsManager plm = new SongsManager();
    // get all songs from sdcard
    this.songsList = plm.getPlayList();

    // looping through playlist
    for (int i = 0; i < songsList.size(); i++) {
        // creating new HashMap
        HashMap<String, String> song = songsList.get(i);

        // adding HashList to ArrayList
        songsListData.add(song);
    }

    // Adding menuItems to ListView
    ListAdapter adapter = new SimpleAdapter(this, songsListData,
            R.layout.playlist_item, new String[] { "songTitle", "songDate" }, new int[] {
                    R.id.songTitle, R.id.songDate });

    setListAdapter(adapter);
    // setup ListView item
    ListView lv = getListView();
    registerForContextMenu(lv);
    notifyDataSetChanged();
    // listening to single listitem click
    lv.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            // getting listitem index
            int songIndex = position;
            // Starting new intent
            Intent in = new Intent(getApplicationContext(),
                    Bandboxstage.class);
            // Sending songIndex to PlayerActivity
            in.putExtra("songIndex", songIndex);
            setResult(100, in);
            // Closing PlayListView
            finish();
        }
    }); 
}


private void notifyDataSetChanged() {
    // TODO Auto-generated method stub

}


@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    // TODO Auto-generated method stub
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}


@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {
    case R.id.delete: 
        Toast.makeText(this, "Delete Called.", Toast.LENGTH_SHORT).show();
        deleteFile(info.id);

        return true;
    case R.id.share:
        Toast.makeText(this, "Share Called.", Toast.LENGTH_SHORT).show();

        default:
            return super.onContextItemSelected(item);
    }
}


private void deleteFile(long id) {
    // TODO Auto-generated method stub

}

}

4

2 に答える 2

0

さて、あなたの答えはあなたの実装自体にあります。あなたが気づいたら、あなたonContextItemSelected() ので、次のステートメントはあなたがあなたのメインリストビューで選択したアイテムの情報をもたらします。

AdapterContextMenuInfo info =(AdapterContextMenuInfo)item.getMenuInfo();

info.positionを使用してリスト内のアイテムの位置を見つけ、songsList.get(info.position)を使用してArrayListからオブジェクトを取得できます。

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

    switch (item.getItemId()) {
    case R.id.delete: 
        Toast.makeText(this, "Delete Called.", Toast.LENGTH_SHORT).show();
        //Make sure songsList is a global variable so that it can be accessed here.
        HashMap<String, String> song = songsList.get(info.position);
        //Call your delete function to delete the song.

        return true;
    case R.id.share:
        Toast.makeText(this, "Share Called.", Toast.LENGTH_SHORT).show();

        default:
            return super.onContextItemSelected(item);
    }
}
于 2012-04-22T05:13:23.353 に答える
0

このLINKを参照すると、長いクリックで変数が渡されます。

以下はdeletefile関数です

file.delete() はファイルを削除します。

于 2012-04-22T04:57:55.217 に答える