当onItemLongClick发生时,android:onListItemClick不会触发

时间:2012-12-07 12:05:03

标签: android

已经实现了OnItemLongClickListener。当LongClicked列表项时,我启用相关listItem的按钮。在LongClicked之后,按钮启用成功,但onListItemClick没有被触发。如果我onListItemClick没有LongClicked,它会成功触发。如果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();
  }

3 个答案:

答案 0 :(得分: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();  
   };
});

答案 1 :(得分:1)

    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时启用删除按钮。

答案 2 :(得分:0)

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