【问题标题】:android: onListItemClick doesn't fire when onItemLongClick occurredandroid:发生 onItemLongClick 时不会触发 onListItemClick
【发布时间】:2019-11-18 00:51:13
【问题描述】:

已经实现了 OnItemLongClickListener。当 LongClicked 列表项时,我启用了相关列表项的按钮。在 LongClicked 之后,按钮成功启用,但 onListItemClick 不会被触发。如果我在没有 LongClicked 的情况下 onListItemClick,它会成功触发。如果 LongClicked 在此之前触发,为什么 onListItemClick 不会触发?

    OnItemLongClickListener listener =  new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
            Account a = null;
            a = (Account) av.getItemAtPosition(position);               
            Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
            v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);
            return false;
        }
    };
    getListView().setOnItemLongClickListener(listener);


  public void onListItemClick(ListView l, View v, int position, long id) {
    // Do something when a list item is clicked
    Account a = null;
    a = (Account) l.getItemAtPosition(position);
    Toast.makeText(AccountActivity.this, a.getAccountName(), Toast.LENGTH_SHORT).show();
  }

【问题讨论】:

  • 请贴出相应的代码,以便我们查看问题所在
  • 我刚刚发布了与该问题相关的 2 个事件。
  • 你在哪里设置 onItemClickListener。在 itemLongClick 上可见的按钮是否也有任何单击事件??

标签: android


【解决方案1】:

尝试如下实现,

setOnItemLongClickListener

setOnItemClickListener

getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
    public boolean onItemLongClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
        Account a = null;
        a = (Account) av.getItemAtPosition(position);               
        Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
         v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);                   

        return false;
   }
});



getListView().setOnItemClickListener(new OnItemClickListener() {
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
     Account a = null;
     a = (Account) l.getItemAtPosition(position);
     Toast.makeText(AccountActivity.this, a.getAccountName(), Toast.LENGTH_SHORT).show();  
   };
});

【讨论】:

  • 是一样的。发生 onItemLongClick 时不会触发 onItemClick。
  • 不,它工作正常,我测试过。乐在下面的项目dl.dropbox.com/u/68130108/ArrayAdapter.rar
  • 是的,我刚刚检查过,您的示例代码运行良好。我认为我的代码有问题,我认为它与这两个事件无关。我会进一步检查。谢谢
【解决方案2】:
    OnItemLongClickListener listener =  new OnItemLongClickListener(){
        public boolean onItemLongClick(AdapterView<?> av, View v, int position, long id) {
            Account a = null;
            a = (Account) av.getItemAtPosition(position);               
            Toast.makeText(AccountActivity.this, "Long Clicked : " + a.getAccountName(), Toast.LENGTH_LONG).show();
            v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);
            return false;
        }
    };
    getListView().setOnItemLongClickListener(listener);    

我刚刚找到了问题的原因。这是我用来在单击 OnItemLongClick 时启用删除按钮的代码行。

v.findViewById(R.id.btn_delete).setVisibility(View.VISIBLE);

当我删除该行时,代码可以完美运行。但是我仍然没有解决问题的方法。当点击 OnItemLongClick 时,我需要有那行代码来启用删除按钮。

【讨论】:

  • 为什么将按钮的可见性设置为可见后listitem或listitem的textview无法点击?
  • 我只是用 ImageView 替换了按钮。然后就没有问题了。两项活动进展顺利。所以我意识到按钮有问题。我认为我们必须在按钮中设置一些属性才能在这种情况下正常工作。您可以模拟问题。
【解决方案3】:

我只是用 ImageView 替换了按钮。然后就没有问题了。两项活动进展顺利。所以我意识到按钮有问题。我认为我们必须在按钮中设置一些属性才能在这种情况下正常工作。您可以模拟问题。 1. 使用 Listview。 2. 通过添加一个TextView 和一个ImageButton 或一个Button 作为ListItem 来自定义列表视图。默认情况下将按钮的可见性设置为不可见。 3、如上实现onItemLongClick事件,在ItemLongClicked时制作按钮。 4. 一旦您 ItemLongClicked 一个 ListItem 并使 ListItem 中的按钮可见,特定 ListItem 的 onListItemClick 事件将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    相关资源
    最近更新 更多