我有一个列表视图。当我在项目中长按一下时,我想显示一个上下文菜单。上下文菜单将显示“删除”和“编辑”。我通过下面的代码实现了它。但是,当我按下长按项目时,它不会显示上下文菜单。请注意,长按项目已成功实施,但是,它不显示上下文菜单。你能解决它对我有帮助吗?
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;
}
更新日志
09-30 15:24:35.611: E/AndroidRuntime(26204): FATAL EXCEPTION: main
09-30 15:24:35.611: E/AndroidRuntime(26204): java.lang.NullPointerException
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.example.test.ManageActivity.onContextItemSelected(ManageActivity.java:91)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.app.Activity.onMenuItemSelected(Activity.java:2728)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4342)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:204)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:994)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.widget.AdapterView.performItemClick(AdapterView.java:308)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.widget.AbsListView.performItemClick(AbsListView.java:1509)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.widget.AbsListView$PerformClick.run(AbsListView.java:3471)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.widget.AbsListView$3.run(AbsListView.java:4834)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.os.Handler.handleCallback(Handler.java:733)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.os.Handler.dispatchMessage(Handler.java:95)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.os.Looper.loop(Looper.java:146)
09-30 15:24:35.611: E/AndroidRuntime(26204): at android.app.ActivityThread.main(ActivityThread.java:5602)
09-30 15:24:35.611: E/AndroidRuntime(26204): at java.lang.reflect.Method.invokeNative(Native Method)
09-30 15:24:35.611: E/AndroidRuntime(26204): at java.lang.reflect.Method.invoke(Method.java:515)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
09-30 15:24:35.611: E/AndroidRuntime(26204): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
09-30 15:24:35.611: E/AndroidRuntime(26204): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:1)
试试这个
@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;
}