Android 上下文菜单不再出现在模拟器中

标签 android eclipse contextmenu

我正在构建一个 Android 应用程序,该应用程序使用数据库列表中的上下文菜单。我一切正常,继续构建使用 map 的应用程序部分,现在(当我切换到 10 级 android google 模拟器时)我遇到了两个问题。第一个修复得足够快,但我的上下文菜单不再出现。我不知道这是否与模拟器的变化有关,但这是我的代码:

在 onCreate 中我们有:

super.onCreate(savedInstanceState);

datasource = new DiaryDataSource(this);
datasource.open();

List<DiaryEntry> values = datasource.getAllDiaryEntries();

DiaryScheduleAdapter adapter = new DiaryScheduleAdapter(this,values);
setListAdapter(adapter);

registerForContextMenu(getListView());

然后在我扩展 ArrayAdapter 的类中,我们有:

@Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
        DiaryEntry diaryEntry = getItem(position);

        View v = convertView;
        if ( v == null ) 
        {
            v = li.inflate(R.layout.diary_schedule, null);
        }

**** TextViews etc ****

        v.setOnClickListener(new OnItemClickListener(position));

        return v;

然后是 onCreateContextMenu:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 
{
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.diary_context_menu, menu);
}

此外,对于普通的点击监听器,我使用这个:

private class OnItemClickListener implements OnClickListener
{           
    private int mPosition;

    OnItemClickListener(int position)
    {
        mPosition = position;
    }

    @Override
    public void onClick(View v) 
    {
        **** various bits of code to set up intent ****

        startActivity(descIntent);
    }               
}

然后是下面的 onContextItemSelected 方法,但我没有深入了解。同样,我确定我没有对代码进行任何更改,但是长按现在没有任何作用。有什么想法吗?

谢谢

最佳答案

重写(有时候我不应该尝试在 IDE 之外编写代码)

这是我想说的一个简单的例子:

public class ExampleActivity extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        List<String> list = new ArrayList<String>();
        list.add("Shoes");
        list.add("Socks");
        list.add("Sandals");

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        setListAdapter(adapter);

        ListView listView = (ListView) findViewById(android.R.id.list);
        registerForContextMenu(listView);
    }   

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        Log.v("Main", "Create Menu");
    }

    protected void onListItemClick (ListView l, View v, int position, long id) {
        Log.v("Main", "Item Click");
    }
}

听起来您希望上下文菜单特定于每一行,在这种情况下我会使用 menuInfo

关于Android 上下文菜单不再出现在模拟器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372831/

相关文章:

android - Pusher VS Client 每秒向服务器请求更改

eclipse - 如何将我的 Eclipse 迁移到另一台计算机?

eclipse - 在插件 : existing mocks/frameworks? 中对 Eclipse 的编辑器逻辑进行单元测试

javascript - 如何在 chrome 网页中使用 javascript 禁用键盘的 ContextMenu 功能?

javascript - jQuery 中除 "input"之外的所有内容的自定义上下文菜单

javascript - 为什么 chrome.contextMenus 创建多个条目?

android - Environment.getExternalStorageDirectory().canWrite() 返回 false

android - 驱动器打不开的pdf

android - RecyclerView 显示除第一项以外的所有内容

java - Java : Code too large for Oracle's javac is not so for Eclipse