2012-04-22 15 views
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 

} 

}

答えて

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); 
    } 
} 
+0

私はこれを理解しています。オブジェクトは「歌」でしょうか?それをどうやって削除したり共有したりできますか? – Twigondrums

+0

はsongsList.delete(曲)を使用します。それはあなたの曲リストから削除する必要があります – Shubhayu

+0

songsList.remove(song);動作していないようです。 「songsList」にキャストを追加するだけです私が間違っているアイデアは? – Twigondrums

0

は、それが長いクリックでvarialble渡し、このLINKを参照してください。

以下

はDELETEFILE機能は、(

file.deleteある)ファイルを削除します。

+0

これについて詳しく説明できますか?どのように私はfile.delete()を使用しますか?リストビューとの関連で? – Twigondrums

関連する問題