Android上下文菜单未显示

时间:2013-08-06 18:24:38

标签: java android android-contextmenu

我的问题就像在说明中所说的那样,上下文菜单没有出现在用户的“触摸并保持”状态。我有一种感觉,这可能是我放置registerForContextMenu的地方 这是我的MainActivity:

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);
  }
}

2 个答案:

答案 0 :(得分:1)

尝试切换这两行

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

所以它应该是

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

你的感觉是正确的。您的ListView位于layout,因此在注册View之前需要先对其进行充气

答案 1 :(得分:0)

我认为用户“触摸并保持”意味着“长按”?

如果有,请尝试查看this post,看看您的问题是否相似。也许您需要使用setOnLongClickListener ...