在 listview Android 1.6 中同时使用 onClickListener 和 onLongClickListener

Posted

技术标签:

【中文标题】在 listview Android 1.6 中同时使用 onClickListener 和 onLongClickListener【英文标题】:Use both onClickListener and onLongClickListener in listview Android 1.6 【发布时间】:2011-06-05 00:29:07 【问题描述】:

我将onClickListeneronLongClickListener 用于ListView 中的TextView。我看到在 android 1.6 中,长单击侦听器与 on click 侦听器一起被触发,这意味着当我长按时都会触发两者。但在未来的版本中并非如此。有什么解决办法吗?

@Override
public View getView(int position, View convertView, ViewGroup parent) 

  if (convertView == null) 
    LayoutInflater inflater = getLayoutInflater();
    row = inflater.inflate(R.layout.row, parent, false);
  

  TextView tv = (TextView) row.findViewById(R.id.tv);

  tv.setOnClickListener(new View.OnClickListener() 
      @Override
      public void onClick(View view) 
        showMessage();
      
  );

  tv.setOnLongClickListener(new View.OnLongClickListener() 
      @Override
      public boolean onLongClick(View v) 
        showLongMessage();
      
  );

【问题讨论】:

什么“修复”?它在 1.6 中同时触发的事实肯定是一个错误。 通过修复,我的意思是,有什么办法可以防止这个问题。 它们的调用顺序是否一致?哪个? 当您进行长按时,回调是否在完全相同的时间被调用? 首先执行longClick事件,然后执行click事件。 【参考方案1】:

您是否在 OnLongClickListener 末尾返回布尔值 true 以表明您不想进一步处理?

【讨论】:

【参考方案2】:

我认为你应该使用 OnItemLongClickListener() 而不是 OnLongClickListener()。

更多回复请见developers website

【讨论】:

【参考方案3】:
TextView t1 = (TextView) findViewById(R.id.textView1);
t1.isClickable();

t1.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 
        // TODO Auto-generated method stub
        Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show();
    
);

t1.setOnLongClickListener(new View.OnLongClickListener() 
    @Override
    public boolean onLongClick(View v) 
        // TODO Auto-generated method stub
        Toast.makeText(getBaseContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
        return true;
    
);

【讨论】:

【参考方案4】:
itemToClick.setOnClickListener(new View.OnClickListener() 
   @Override
    public void onClick(View v)       
      //do your logic on click 
     );
itemToClick.setOnLongClickListener(new View.OnLongClickListener() 
    @Override
    public boolean onLongClick(View v) 
      // do your logic for long click and remember to return it 
        return true; );

【讨论】:

以上是关于在 listview Android 1.6 中同时使用 onClickListener 和 onLongClickListener的主要内容,如果未能解决你的问题,请参考以下文章

Android进阶知识——Android性能优化

Android进阶知识——Android性能优化

Android进阶知识——Android性能优化

POSTGRESQL 中同一行的两个结果

Matlab图例中同一行的两种不同颜色

了解在 Android 1.6/2.0/2.1 上使用 SoundPool 加载声音是不是成功