我正在构建一个Android应用程序,它使用数据库列表中的上下文菜单。我已经完成了所有工作,继续构建使用地图的应用程序的一部分,现在(虽然我已经切换到10级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 :(得分: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
。
答案 1 :(得分:0)
解决方案是将下面的代码行添加到我的getView方法中:
convertView.setLongClickable(true);
再次感谢Sam提供了大量有用的信息