即使是listview,上下文菜单也不会长按

时间:2015-09-30 05:15:34

标签: android listview android-listview android-contextmenu

我有一个列表视图。当我在项目中长按一下时,我想显示一个上下文菜单。上下文菜单将显示“删除”和“编辑”。我通过下面的代码实现了它。但是,当我按下长按项目时,它不会显示上下文菜单。请注意,长按项目已成功实施,但是,它不显示上下文菜单。你能解决它对我有帮助吗?

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)

1 个答案:

答案 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;
}
相关问题