簡體   English   中英

onContextItemSelected 沒有被調用

[英]onContextItemSelected doesn't get called

我制作了一個簡單的應用程序,它只顯示一個 AlertDialog,列表中有四個項目。 我注冊了一個上下文菜單。 當我長按其中一項時,我會得到上下文菜單。 然后我 select 上下文菜單中的一個項目,但 onContextItemSelected 永遠不會被調用。 有什么幫助嗎? 謝謝。

測試.java:

package com.cerulean.tech.creations.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;

public class test extends Activity {

    private String[] files;
    AlertDialog alert;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        files = new String[4];
    }

    public void selectScheme(View v) {
        files[0] = "<New Scheme>";
        files[1] = "test1";
        files[2] = "test2";
        files[3] = "test3";
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setItems(files, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int item) {
                   }});  
        alert = builder.create();
        alert.show();
        registerForContextMenu(alert.getListView());
    }


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("Context Menu");
        menu.add(0, v.getId(), 0, "Delete");
        menu.add(0, v.getId(), 0, "Cancel");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        return false;
    }
}

在 main.xml 中,我只是一個用 android:onClick="selectScheme" 定義的按鈕

在這一行之后:

    registerForContextMenu(alert.getListView());

輸入這個:

    alert.getListView().setOnCreateContextMenuListener(this);

而不是 onContextItemSelected(MenuItem item) function 使用這個:

@Override
public boolean onMenuItemSelected(int featureId, MenuItem menuItem) {

以下 function 總是被執行。

 public boolean onMenuItemSelected(int featureId, MenuItem menuItem)

但是您可以使用以下標志區分上下文菜單和選項菜單:

if (featureId == Window.FEATURE_CONTEXT_MENU)
{
//Do something
}
else if (featureId == Window.FEATURE_OPTIONS_PANEL)
{
//Do something else
}

只需添加

@Override
public boolean onMenuItemSelected(int aFeatureId, MenuItem aMenuItem) {
    if (aFeatureId==Window.FEATURE_CONTEXT_MENU)
        return onContextItemSelected(aMenuItem);
    else
        return super.onMenuItemSelected(aFeatureId, aMenuItem);
}

我想以三木的回答為基礎。

我只用過

registerForContextMenu(this.getListView());

this.getListView().setOnCreateContextMenuListener(this);

在我的父母 ListActivity class 中。

我將代碼從onContextItemSelected(MenuItem item)方法移到了onMenuItemSelected方法。

  @Override
  public boolean onMenuItemSelected(int featureId, MenuItem item) {
    try {
      if (item.getItemId() == R.id.new_entry_menu_option) {

        ...

      }

      ...

      if (item.getItemId() == R.id.quit) {
        /* perform cleanup */
        ...
        return true;
      } else if (item.getItemId() == R.id.delete_entry_context_menu_option) {
        displayConfirmRequest(DELETE_CONFIRMATION_MESSAGE, item);
        return true;
      } else if (item.getItemId() == R.id.2ND_CONTEXT_OPTION) {
        //code for 2nd option
        return true;
      } else if (item.getItemId() == R.id.3RD_CONTEXT_OPTION) {
        //code for 3RD option
        return true;
      } else {
        return super.onMenuItemSelected(featureId, item);
      }// end if/else if/else
    }// end try
    catch (Exception error) {
      //error handler code
      return false;
    }// end try/catch
  }// end onMenuItemSelected

並確保在您的子類中,如果您在super.ListActivity class 的子類中覆蓋 onMenuItemSelected ,如果您希望在 super.class 中處理上下文菜單選項,請包含以下代碼。

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
  if (<condition>) {

    ...

  } else {
    return super.onMenuItemSelected(featureId, item);
  }
}// end onMenuItemSelected

此問題的真正原因是您正在覆蓋onContextItemSelected而沒有調用super.onContextItemSelected 將您的onContextItemSelected方法更改為:

@Override
public boolean onContextItemSelected(MenuItem item) {
    if (super.onContextItemSelected(MenuItem item))
        return true;
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM