2012-04-29 45 views
1

我正在构建一个Android应用程序,该应用程序在数据库的列表中使用上下文菜单。我把它一切工作正常,移动到建立使用地图的应用程序的一部分,现在(当我已经切换到10级的Android谷歌模拟器)我有两个问题涌现。第一个已经很快修复了,但是我的上下文菜单不再出现。我不知道这是否是与在模拟器的变化,但这里是我的代码:Android上下文菜单不再出现在模拟器中

在的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方法,但我没有得到那么多。再次强调,我确信我没有对代码做任何修改,但是长时间点击现在什么都不做。有任何想法吗?

感谢

+0

请发表您的onLongClick,getListView等任何代码logcat错误也是如此。 – Sam 2012-04-29 14:41:11

+0

我没有任何onLongClick代码,并没有得到任何错误。我是一个点击监听器 - 'v.setOnClickListener(new OnItemClickListener(position));' - 你也可以直接点击每个列表项目。但是,再次,这个代码足以让它在一个星期前工作......我应该添加一些onLongClick代码吗? – 2012-04-29 14:48:16

+0

不是特别的,我想确保没有冲突的代码,因为你提供的代码看起来很好。你最近是否清理过你的项目?添加'super.onCreateContextMenu(menu,v,menuInfo);'到OnCreateContextMenu帮助? – Sam 2012-04-29 15:02:51

回答

0

解决的办法是添加的代码行下面我getView方法:

convertView.setLongClickable(true); 
再次

感谢Sam为许多有用的输入

1

重写(有些日子,我不应该试图写一个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

+0

是的,这是一个ListView活动。我认为这听起来不错。所以基本上这是一个列表,如果你点击一个项目,它会把你带到另一个活动,并使用它的细节(使用OnItemClickListener)。如果你长按,你会得到一个上下文菜单来编辑/删除列表项。目前只是正常的点击工作。我是否想要将一行代码单独添加到我已有的代码或仅包含一行代码?我会开始玩!哦,我有一个单独的空白'onClick(View v)'方法,以防有所作为。 – 2012-04-29 16:18:46

+0

我刚刚添加了当前onItemClickListener代码 – 2012-04-29 16:24:27

+0

我忘了提及所有这一点:确保无论您如何处理该项目,单击每一行,它都不会以某种方式吸收您长时间点击。 – Sam 2012-04-29 16:25:12

相关问题