2012-02-09 10 views
0

フォルダのメディアファイルを表示するリストビューに問題があります... 拡張可能なリストビュー(消耗品はコンテキストメニューのように動作するはずです)でこれを解決しようとしましたが失敗しましたひどく...コンテキストメニューで簡単な方法にすることにしました。アンドロイド:ファイルのコンテキストメニュー+リストビュー

リストは、フォルダを読み込んでmp3 & wavファイル用にフィルタリングすることでアイテムを取得します。 今、contextmenuにはオプション "play"、 "stop"があるはずです& "delete" ファイルをonListItemClick経由で再生する方法を知りましたが、コンテキストメニューに正しくオプションを入れる方法がわかりません。私のリストをそれに割り当てます。ここまでは のコードです。 事前に助けてくれてありがとう。

import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.widget.TextView; 
import java.io.File; 
import java.io.FilenameFilter; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Pattern; 
import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.content.DialogInterface; 
import android.util.Log; 
import android.view.ContextMenu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.widget.AdapterView.AdapterContextMenuInfo; 

class Mp3WavFilter implements FilenameFilter { 
    public boolean accept(File dir, String name) { 
     return Pattern.matches(".*\\.(wav|mp3)", name); 

    } 
} 


public class TabAufnahmen extends ListActivity { 

    private static final String MEDIA_PATH = new String("/sdcard/Babyaufnahmen/"); 
    private List<String> songs = new ArrayList<String>(); 
    private MediaPlayer mp = new MediaPlayer(); 
    TextView selection; 

    ListView list = (ListView)findViewById(R.id.list); 

    @Override 
    public void onCreate(Bundle icicle) { 
     try { 
      super.onCreate(icicle); 
      setContentView(R.layout.songlist); 
      updateSongList(); 
     } catch (NullPointerException e) { 
      Log.v(getString(R.string.app_name), e.getMessage()); 
     } 
    } 

    public void updateSongList() { 
     File home = new File(MEDIA_PATH); 
     if (home.listFiles(new Mp3WavFilter()).length > 0) { 
      for (File file : home.listFiles(new Mp3WavFilter())) { 
       songs.add(file.getName()); 
      } 


      /*ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.song_item, songs); 
      list.setAdapter(songList); 
      //list.setListAdapter(songList); 
      registerForContextMenu(list);*/ 


      /* setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, songs)); 
      selection=(TextView)findViewById(R.id.selection); 

      registerForContextMenu(getListView());*/ 

     }  
    } 


/* @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     try { 

      mp.reset(); 
      mp.setDataSource(MEDIA_PATH + songs.get(position)); 
      mp.prepare(); 
      mp.start(); 
     } catch(IOException e) { 
      Log.v(getString(R.string.app_name), e.getMessage()); 
     } 
    }*/ 




    /*public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    }*/ 


    /*public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     String[] names = getResources().getStringArray(R.array.names); 
     switch(item.getItemId()) { 
     case R.id.abspielen: 
      Toast.makeText(this, "You have chosen the " + getResources().getString(R.string.abspielen) + 
        " context menu option for " + names[(int)info.id], 
        Toast.LENGTH_SHORT).show(); 
      return true; 
     case R.id.anhalten: 
      Toast.makeText(this, "You have chosen the " + getResources().getString(R.string.anhalten) + 
        " context menu option for " + names[(int)info.id], 
        Toast.LENGTH_SHORT).show(); 
      return true; 
     case R.id.loeschen: 
      Toast.makeText(this, "You have chosen the " + getResources().getString(R.string.loeschen) + 
        " context menu option for " + names[(int)info.id], 
        Toast.LENGTH_SHORT).show(); 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
     } 
    }*/ 



} 

答えて

0

アイテムのロングクリックが行われたとき、あなたは単に初期にregisterForContextMenu(ビュー)を使用して、コンテキストメニューのためのあなたのリストビューを登録することができますコンテキストメニューを開きたい場合。

そして、もしあなたがコンテキストメニューを開くには、私はコンテキストメニューを表示するためにopenContextMenuを使うことができます。ビューのコンテキストメニューも登録する必要があります。

1

助けてくれてありがとう、最後に考え出しました。 まだ、私に迷惑をかける何かがあります。 ファイルを削除すると正しく削除されますが、リストは更新されません。 - リストを定期的に生成する方法はありますか?

class Mp3WavFilter implements FilenameFilter { 
    public boolean accept(File dir, String name) { 
     return Pattern.matches(".*\\.(wav|mp3)", name); 

    } 
} 


public class TabAufnahmen extends ListActivity { 

    private static final String MEDIA_PATH = new String("/sdcard/Babyaufnahmen/"); 
    private List<String> songs = new ArrayList<String>(); 
    private MediaPlayer mp = new MediaPlayer(); 

    @Override 
    public void onCreate(Bundle icicle) { 
     try { 
      super.onCreate(icicle); 
      //setContentView(R.layout.songlist); 
      updateSongList(); 
     } catch (NullPointerException e) { 
      Log.v(getString(R.string.app_name), e.getMessage()); 
     } 
    } 

    public void updateSongList() { 
     File home = new File(MEDIA_PATH); 
     if (home.listFiles(new Mp3WavFilter()).length > 0) { 
      for (File file : home.listFiles(new Mp3WavFilter())) { 
       songs.add(file.getName()); 
      } 

      ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.song_item,songs); 
      this.setListAdapter(songList); 
      registerForContextMenu(getListView()); 
     }  
    } 
    //der player 
    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     //try { 

      mp.reset(); 
      //mp.setDataSource(MEDIA_PATH + songs.get(position)); 
      //mp.prepare(); 
      //mp.start(); 
     //} catch(IOException e) { 
     // Log.v(getString(R.string.app_name), e.getMessage()); 
     //} 
    } 




    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    } 


    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    // String[] names = getResources().getStringArray(R.array.); 
     switch(item.getItemId()) { 
     case R.id.abspielen: 
      Toast.makeText(this, "Sie haben " + getResources().getString(R.string.abspielen) + "für die Datei" + getListView().getAdapter().getItem(info.position).toString() + " gewählt", 
        Toast.LENGTH_LONG).show(); 
      try { 

       mp.reset(); 
       mp.setDataSource(MEDIA_PATH + getListView().getAdapter().getItem(info.position).toString()); 
       mp.prepare(); 
       mp.start(); 
      } catch(IOException e) { 
       Log.v(getString(R.string.app_name), e.getMessage()); 
      } 

      return true; 
     case R.id.loeschen: 
      Toast.makeText(this, "Sie haben " + getResources().getString(R.string.loeschen) + "für die Datei" + getListView().getAdapter().getItem(info.position).toString() + " gewählt", 
        Toast.LENGTH_SHORT).show(); 
      File file = new File("/sdcard/Babyaufnahmen/" + getListView().getAdapter().getItem(info.position).toString()); 
      boolean deleted = file.delete(); 


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

     } 
    } 



} 
関連する問題