отображение контекстного меню для элементов списка - PullRequest
0 голосов
/ 22 марта 2012

Я работаю на музыкальном проигрывателе Android. Ниже приведен код для отображения списка песен и отображения диалогового окна при длительном нажатии на конкретную песню из списка. Но как-то она не работает в этом случае. Можете ли вы выяснить проблему?

public class ListQueue extends ListActivity{
//  ListActivity l1= new ListActivity();
    public static final String MEDIA_PATH= new String("/sdcard/");  //path of the songs
    public static List<String> songs = new ArrayList<String>(); //array name of the songs
    public static int currentPosition = 0;  //current position of the song in the List
    public static String songName;          //name of the song
    public static int duration;         //total duration of the song
    public static MediaPlayer mp=new MediaPlayer();
    public String[] menuItems={"set as ringtone","delete","send","Crop","details"};
    public String[] songsarray;
    public int i=0;
    //  public TextView textViewToChange=null;
    //  public static double n ;

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

        //updates the song list
        updateSongList();
    }

    //update song list called in onCreate()
    public void updateSongList(){
        File home=new File(MEDIA_PATH); 
        songs.clear();
        if(home.listFiles(new Mp3Filter()).length > 0){
            for(File file : home.listFiles(new Mp3Filter())){
                songs.add(file.getName());
                songsarray[i++]=file.getName();

                ArrayAdapter<String> songList = new ArrayAdapter<String>(this,R.layout.song_item,songs);
                setListAdapter(songList);
            }
        }


        registerForContextMenu(getListView());
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
      if (v.getId()==R.id.list) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        menu.setHeaderTitle(songsarray[info.position]);
       // String[] menuItems = getResources().getStringArray(R.array.menu);
        for (int i = 0; i<menuItems.length; i++) {
          menu.add(Menu.NONE, i, i, menuItems[i]);
        }
      }
    }

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

внесите эти изменения и попробуйте ..

 @Override
public void onCreateContextMenu(ContextMenu menu, View v,
    ContextMenuInfo menuInfo) {
  if (v.getId()==R.id.list) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(songsarray[info.position]);
   // String[] menuItems = getResources().getStringArray(R.array.menu);
    for (int i = 0; i<menuItems.length; i++) {
      menu.add(Menu.NONE, i, i, menuItems[i]);
    }
  return true;<---(1)
  }
 return false;<---(2)
}
0 голосов
/ 22 марта 2012

Я думаю, что ваше условие не возвращает true (if (v.getId () == R.id.list)). поэтому удалите это условие в методе onCreateContextMenu ().

 @Override
 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
{    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; 
        menu.setHeaderTitle(songsarray[info.position]);
        // String[] menuItems = getResources().getStringArray(R.array.menu); 
        for (int i = 0; i<menuItems.length; i++)
             menu.add(Menu.NONE, i, i, menuItems[i]);
} 

Попробуйте использовать приведенный выше код вместо метода onCreateConxtMenu ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...