ListView中的ContextMenu,长按出来后如何知道来自哪一行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ListView中的ContextMenu,长按出来后如何知道来自哪一行?相关的知识,希望对你有一定的参考价值。
listview.setOnCreateContextMenuListener(new OnCreateContextMenuListener() public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) menu.add(0, 0, 0, "删除"); menu.add(0, 1, 1, "修改"); );上面的代码是创建一个长按后弹出的菜单,我写了2个菜单,一个【删除】一个【修改】。都知道的吧。如果我点击了删除,要删除ListView 中我长按的那一行,怎么得到的这一行?上面的参数没有传进id 而且点击后的方法public boolean onContextItemSelected(MenuItem item) 也只是传这个弹出后的菜单的item。求解。。
朋友,你可以再Item中通过一个方法得到MenuInfo然后把它强制转换成AdapterContextMenuInfo,然后通过得到的对象的position方法就能得到listView的位置了。 参考技术A menuInfo里有秘密,找到有奖哦。。。。好久前的东西了,我就记得通过menuinfo能知道是哪项ListView长按后AlertDialog中的可点击选项
【中文标题】ListView长按后AlertDialog中的可点击选项【英文标题】:Clickable Options in AlertDialog after ListView long click 【发布时间】:2017-09-27 03:31:01 【问题描述】:我正在尝试使用 OnItemLongClickListener() 设置一个 listView,这将打开一个带有自定义布局的警报对话框。然后我希望布局有两个按钮,一个用于打开另一个活动以编辑 SQLite DB 中的条目,另一个用于删除该条目。我的 onItemLongClickListener() 工作,我可以打开自定义布局,但我不知道如何在单击按钮后关闭对话框,或者执行我想要的方法。
我的 ListViewItemLongClick():
private void listViewItemLongClick()
final ListView myList = (ListView) findViewById(R.id.resourcesList);
myList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
Id = id;
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
// ...Irrelevant code for customizing the buttons and title
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_layout, null);
dialogBuilder.setView(dialogView);
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
return true;
);
我的自定义警报布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_>
<Button
android:id="@+id/Edit"
android:layout_
android:layout_
android:onClick="edit"
android:text="Edit" />
<Button
android:id="@+id/delete"
android:layout_
android:layout_
android:onClick="delete"
android:text="Delete" />
</LinearLayout>
任何帮助将不胜感激,我对 android 编程还是很陌生。
干杯!
【问题讨论】:
【参考方案1】:使用我的解决方案,您不需要 XML 文件。当然,您可以使用它来添加一个 EditText 并使用 EditText ed = (EditText)dialog.findViewById(R.id.dialog_get_name_ed);
获取它
但对于你的情况,试试这个
dialogBuilder.setPositiveButton("Edit", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
// you have your edit button
);
dialogBuilder.setNegativeButton("Delete", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
// you have your delete button
);
【讨论】:
以上是关于ListView中的ContextMenu,长按出来后如何知道来自哪一行?的主要内容,如果未能解决你的问题,请参考以下文章
在 LongPress 上显示 ContextMenu 以获取 xamarin 表单中的视图