【问题标题】:Issue with onLongClickListener and PositiononLongClickListener 和 Position 的问题
【发布时间】:2014-09-03 05:53:32
【问题描述】:

所以我有一个充满卡片的列表视图,我想长按每一个并能够分享卡片上的文字。我对 longPress 事件进行了研究,这就是我想出的:

在列表视图上设置监听器

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 方法,但没有任何效果...感谢您的帮助!

【问题讨论】:

  • 返回假;这是什么
  • 哪个xml有tvContenttTitle
  • Plus 你在函数showOptionsMenu 中传递position,但不要使用它。请纠正你的逻辑。根据位置初始化 textview 并相应地检索文本。
  • 请使用函数showOptionsMenu(position)中的位置;

标签: android android-listview onitemclicklistener


【解决方案1】:

您没有在showOptionsMenu(int position) 中使用输入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参数,也就是被点击的视图,然后显示你想要的。

【讨论】:

  • getItemAtPosition 返回一个对象,因此它与我的方法中的 int 参数不兼容??
  • 那么您需要将该对象转换或转换为您需要的对象。您还应该更改您的 showOptionsMenu 方法,因为现在它根本没有使用它的输入。我的解释向您展示了如何点击该项目。你决定如何处理它:)
  • 我想我不确定“现在它根本没有使用它的输入”是什么意思。我给该方法一个称为位置的 int。由于缺乏更好的命名,方法 param 也是一个名为 position 的 int。也许这只是我从 Java 知识中忘记的东西。
  • 函数 showOptionsMenu 中的参数 int position 不在任何地方使用。你只是传递它,但你不使用它。
  • 噢噢噢噢!现在我明白你的意思了......是的,这是一个大脑放屁。我会回复你的。
【解决方案2】:

您应该在适配器上调用getItem并将对象(即数据数组的position处的数据)传递给showOptionsMenu

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多