0

폴더의 mediafiles를 보여주는 listview에 문제가 있습니다 ... 확장 가능한 listview를 통해 이것을 해결하려고했으나 (소모품은 컨텍스트 메뉴처럼 동작해야 함) 실패했습니다. 대단히 ... 컨텍스트 메뉴를 통해 간단한 방법으로 만들기로 결정했습니다.android : 컨텍스트 메뉴 + 파일 목록보기

목록은 폴더를 읽고 mp3 & wav 파일을 필터링하여 항목을 가져옵니다. 이제 컨텍스트 메뉴에 "재생", "중지"옵션이 있어야합니다. "삭제" 나는 파일을 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 (보기)를 사용하여 상황에 맞는 메뉴에 대한 목록보기를 등록 할 수 있습니다 완료되면 컨텍스트 메뉴를 엽니 다.

그리고 만약 당신이 문맥 메뉴 onItemClick을 열고 싶다면 문맥 메뉴를 보여주기 위해 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); 

     } 
    } 



} 
관련 문제