【问题标题】:Use both onClickListener and onLongClickListener in listview Android 1.6在 listview Android 1.6 中同时使用 onClickListener 和 onLongClickListener
【发布时间】: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事件。

标签: android listview onlongclicklistener


【解决方案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; }});
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-13
          • 2018-05-09
          • 2020-10-22
          • 1970-01-01
          相关资源
          最近更新 更多