Контекстното меню на Android не се показва

Проблемът ми е точно както се казва в описанието, контекстното меню не се появява при „докосване и задържане“ от потребителя. Имам чувството, че може да е там, където поставих registerForContextMenu.
Ето моята основна дейност:

import java.util.ArrayList;
import android.app.ListActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ListView;
public class MainActivity extends ListActivity {
private ArrayList<Sound> mSounds = null;
private SoundAdapter mAdapter = null;
static MediaPlayer mMediaPlayer = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
registerForContextMenu(getListView());
setContentView(R.layout.activity_main);
this.getListView().setSelector(R.drawable.selector);
//create a simple list
mSounds = new ArrayList<Sound>();
Sound s = new Sound();
s.setDescription("Anjels");
s.setSoundResourceId(R.raw.anjels);
mSounds.add(s);
s = new Sound();
s.setDescription("Aggro");
s.setSoundResourceId(R.raw.aggro);
mSounds.add(s);
s = new Sound();
s.setDescription("Basix");
s.setSoundResourceId(R.raw.basix);
mSounds.add(s);
s = new Sound();
s.setDescription("Bender");
s.setSoundResourceId(R.raw.bender);
mSounds.add(s);
mAdapter = new SoundAdapter(this, R.layout.list_row, mSounds);
setListAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView parent, View v, int position, long id){
Sound s = (Sound) mSounds.get(position);
MediaPlayer mp = MediaPlayer.create(this, s.getSoundResourceId());
mp.start();

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

person Jason Mills    schedule 06.08.2013    source източник
comment
Каква версия на Android използвате?   -  person MiStr    schedule 06.08.2013
comment
Целта на действителното устройство? Целта е api 10 ICS, но аз използвам SGS3mini на api 16 Jellybean   -  person Jason Mills    schedule 06.08.2013


Отговори (2)


Опитайте да смените тези два реда

registerForContextMenu(getListView());
setContentView(R.layout.activity_main);

така и трябва да бъде

setContentView(R.layout.activity_main);
registerForContextMenu(getListView());

Чувството ти беше правилно. Вашият ListView е във вашия layout, така че първо трябва да го напомпате, преди да регистрирате View

person codeMagic    schedule 06.08.2013
comment
Мога ли просто да попитам, за да мога да се поуча от това, защо има такава разлика кой ред е първи? - person Jason Mills; 06.08.2013
comment
Както казах в последното си изречение от отговора, вашите Views съществуват във вашите layout, така че сякаш не съществуват, докато коренът layout не бъде раздут. Същата причина, че ако се опитате да инициализирате View преди да извикате setContentView(), той ще върне null и не можете да използвате метод или слушател за него - person codeMagic; 06.08.2013
comment
Надявам се, че има смисъл - person codeMagic; 06.08.2013
comment
Съвършен смисъл да, сега разбирам. Благодаря. Просто се чудя дали бихте могли да надникнете в другия ми въпрос, това ме подлудява. stackoverflow .com/questions/18080679/ - person Jason Mills; 07.08.2013

Предполагам, че "докосване и задържане" от потребителя означава "дълго натискане"?

Ако е така, опитайте да разгледате тази публикация, за да видите дали вашите проблеми са подобни. Може би трябва да използвате setOnLongClickListener...

person MiStr    schedule 06.08.2013
comment
Благодаря за отговора, след ден на чесане по главата най-накрая разбрах какво не е наред. - person Jason Mills; 06.08.2013