所以我有一个充满卡片的列表视图,我想长按每个卡片,并能够共享卡片上的文字。我已经完成了关于longPress事件的研究,这就是我想出来的:
在listview上设置监听器
lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
showOptionsMenu(position);
return false;
}
});
这是showOptionsMenu方法
public void showOptionsMenu(int position) {
new AlertDialog.Builder(this).setCancelable(true).setItems(R.array.longClickItems,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialoginterface, int i) {
TextView tvMessage = (TextView) findViewById(R.id.tvContent);
TextView tvName = (TextView) findViewById(R.id.tvTitle);
String message = tvMessage.getText().toString();
String name = tvName.getText().toString();
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
String shareBody = "Message:\n" + message + "\n" + "\nSigned by:\n" + name;
shareBody = shareBody.replace("-", "");
sharingIntent.putExtra(Intent.EXTRA_TEXT, shareBody);
startActivity(Intent.createChooser(sharingIntent, "Send To:"));
}
}).show();
}
现在,所有这些都很有效,除了有一个问题:每次长按,无论列表项位置如何,检索的文本始终来自列表中的第一项。我尝试了listview类中的一些getPosition方法,但没有任何效果......感谢帮助!
答案 0 :(得分:3)
您没有在position
中使用输入showOptionsMenu(int position)
。
在OnLongClick中,参数为:
parent The AbsListView where the click happened
view The view within the AbsListView that was clicked
position The position of the view in the list
id The row id of the item that was clicked
您可以使用:
parent.getItemAtPosition(位置)
获取该位置的物品。然后,您可以将该项目传递给您的其他方法,或者可能将卡片名称Toast。
或者直接使用view
参数,该参数是点击的视图,然后显示您想要的内容。
答案 1 :(得分:1)
您应该在适配器上调用getItem
并将对象(即数据阵列的position
处的数据)传递给showOptionsMenu