0

У меня возникла проблема со списком, который показывает медиафайлы в папке ... Я попытался решить это с помощью расширяемого списка (расходные элементы должны вести себя как контекстное меню), но не удалось ужасно ... поэтому я решил сделать это простым способом через контекстменю ..android: контекстное меню + список для файлов

Список получает свои товары, читая папку и фильтруя для mp3 & wav-файлы. Теперь в контекстном меню должны быть опции «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

Если вы хотите, чтобы открыть контекстное меню, когда Long Нажмите на пункт будет сделано, то вы можете просто зарегистрировать ListView для контекстного меню с помощью registerForContextMenu (View) на инициализации.

И если вы хотите открыть контекстное меню 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); 

     } 
    } 



} 
Смежные вопросы