Android 在listview的长时间单击中不显示关联菜单
我有一个列表视图。我想在长按某个项目时显示关联菜单。关联菜单将显示“删除”和“编辑”。我用下面的代码实现了它。但是,当我长按“单击项目”时,它不会显示关联菜单。请注意,长单击项已成功实现,但它不显示上下文菜单。你能帮我修一下吗Android 在listview的长时间单击中不显示关联菜单,android,listview,android-listview,android-contextmenu,Android,Listview,Android Listview,Android Contextmenu,我有一个列表视图。我想在长按某个项目时显示关联菜单。关联菜单将显示“删除”和“编辑”。我用下面的代码实现了它。但是,当我长按“单击项目”时,它不会显示关联菜单。请注意,长单击项已成功实现,但它不显示上下文菜单。你能帮我修一下吗 public class ManageActivity extends Activity { private ListView mainListView ; public void onCreate(Bundle savedInstanceState) {
public class ManageActivity extends Activity {
private ListView mainListView ;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_main);
// Find the ListView resource.
mainListView = (ListView) findViewById( R.id.mainListView );
mainListView.setAdapter( listAdapter );
registerForContextMenu(mainListView);
}
mainListView.setOnItemLongClickListener(new android.widget.AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int pos, long id) {
// TODO Auto-generated method stub
String audio_file_name = (String) mainListView.getItemAtPosition(pos);
Log.v("long clicked",String.valueOf(audio_file_name));
return true;
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
menu.add(0, v.getId(), 0, "Edit");
menu.add(0, v.getId(), 0, "Delete");
}
@Override
public boolean onContextItemSelected(MenuItem item){
if(item.getTitle()=="Edit")Toast.makeText(getApplicationContext(), "Edit Clicked", Toast.LENGTH_LONG).show();
if(item.getTitle()=="Delete")Toast.makeText(getApplicationContext(), "Delete Clicked", Toast.LENGTH_LONG).show();
return true;
}
试试这个
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
menu.add(v.getId(), 1, 0, "Edit");
menu.add(v.getId(), 2, 0, "Delete");
}
您的onContextItemSelected()
方法应该是这样的
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
String audio_file_namej = (String) mainListView.getItemAtPosition(acmi.position);
Log.v("long clicked",String.valueOf(audio_file_name));
switch (item.getItemId()) {
case 1:
Toast.makeText(getApplicationContext(), "Edit Clicked", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(getApplicationContext(), "Delete Clicked", Toast.LENGTH_LONG).show();
break;
}
return true;
}
好的,请设置setLongClickable(true);我定的。但它仍然不起作用。我在SetonitemlongClickListener中打印了“长点击”好的。检查->
字符串音频文件名=(字符串)arg0.getItemAtPosition(pos)实际上,我的问题是上下文菜单没有显示。我已成功打印了音频文件名,该文件名来自listadapter
的位置..请删除您的OnItemLongClickListener,然后重试您不能同时使用OnItemLongClickListener和上下文菜单您是对的。但是,我想从listview中获取要删除/编辑的项目详细信息。怎么能做到?它崩溃了。我的控件是mainListView,而不是TextView。您可以找到许多链接来获取从listview项中选择的OnContextItem上的文本
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item.getMenuInfo();
String audio_file_namej = (String) mainListView.getItemAtPosition(acmi.position);
Log.v("long clicked",String.valueOf(audio_file_name));
switch (item.getItemId()) {
case 1:
Toast.makeText(getApplicationContext(), "Edit Clicked", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(getApplicationContext(), "Delete Clicked", Toast.LENGTH_LONG).show();
break;
}
return true;
}