onLongClickListener和Position的问题

时间:2014-09-03 05:53:33

标签: android android-listview onitemclicklistener

所以我有一个充满卡片的列表视图,我想长按每个卡片,并能够共享卡片上的文字。我已经完成了关于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方法,但没有任何效果......感谢帮助!

2 个答案:

答案 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