首先是大家好,对不起我的英语不好,我是Brazillian!自从我开始使用Android以来,我一直在StackOverflow中学习其他用户的问题。但现在轮到我问了......
我从教程中制作了一个音板应用程序,但我决定实现一项新功能:设置为铃声/通知。我很确定将ogg文件设置为铃声我没有问题因为我刚刚在这里看到了答案...我的问题是如何获取调用上下文菜单的listitem的ID?
看看我的代码(葡萄牙语toque /notificação意味着铃声/通知):
registerForContextMenu(findViewById(android.R.id.list));
...
@Override
public void onCreateContextMenu(ContextMenu menuc, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menuc, v, menuInfo);
menuc.setHeaderTitle("Usar como");
menuc.add(Menu.NONE, 0, Menu.NONE, "Toque");
menuc.add(Menu.NONE, 1, Menu.NONE,"Notificação");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Toque") { toque(0,item.getItemId()); }
else if(item.getTitle() == "Notificação") { notificacao(0,item.getItemId()); }
else { return false; }
return true;
}
public void toque(int position,int id){
Sound s = (Sound) mSounds.get(position);
Toast.makeText(this, s.getSoundResourceId(), Toast.LENGTH_SHORT).show();
}
public void notificacao(int position,int id){
Sound s = (Sound) mSounds.get(position);
Toast.makeText(this, s.getSoundResourceId(), Toast.LENGTH_SHORT).show();
}
所以,你可以看到我做了一个toast来测试参数。现在我可以通过数字“0”得到res / raw / example.ogg但是我想动态获取ListView的ID,所以我可以将它作为整数“位置”传递...
示例:
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle() == "Toque") { toque(GET.LISTITEM.ID, item.getItemId()); }
else if (item.getTitle() == "Notificação"){ notificacao(GET.LISTITEM.ID, item.getItemId()); }
else { return false; }
return true;
}
我不知道我是否足够清楚,或者是否可能,但我相信如果我找到办法,我会很高兴。
提前致谢,卢卡斯。
答案 0 :(得分:1)
假设您使用的是普通列表框
AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
info.id
会让你获得这个职位。
所以你可以打电话
notificacao(info.id,item.getItemId())
答案 1 :(得分:1)
相反,如果你想实现像快速行动徽章这样的推特(是的,它可以在旧推特中找到,请查看下面的图片),我建议你实施Quick Action bar。
有关Quick Action design pattern的更多信息。