在Android 1.6中的ListView中同时使用onClickListener和onLongClickListener

40

我在一个ListView中的一个TextView上使用了onClickListeneronLongClickListener。 我发现在Android 1.6中,长按监听器会与单击监听器一起触发,这意味着当我长按时两者都会被触发。 但是在未来版本中,情况并非如此。 有没有解决这个问题的方法?

@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();
      }
  });
}

我的意思是,有没有办法解决这个问题。 - dcanh121
它们的调用顺序是否保持一致?哪个? - Cheryl Simon
当您进行长按操作时,回调函数是否会在完全相同的时间被调用? - Gero
首先执行长按事件,然后执行单击事件。 - dcanh121
http://strangeoptics.blogspot.com/2011/09/android-how-to-figure-out-long-click.html - strangeoptics
显示剩余3条评论
4个回答

127

你在OnLongClickListener的结尾处返回布尔值true,以表示你不希望进行进一步的处理吗?


14

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

详细的响应请参见开发者网站


13
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;
    }
});

3
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; }});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接