【问题标题】:listview setOnItemLongClickListerer didnt work [duplicate]listview setOnItemClickListener 不起作用[重复]
【发布时间】:2016-05-19 08:55:44
【问题描述】:

我正在尝试在 listview 行上实现 onItemLongClickListener 和 onItemClickListener 事件,但问题是当我长按 listview 行并释放它时,这两个事件会同时被调用。请给我解决方案,我怎样才能做到这一点。

这是我的代码

listregional.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        final CharSequence[] dialogregion = {"Edit","Delete"};
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Pilih Menu");
        builder.setItems(dialogregion, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int region) {
                switch (region){
                    case 0:
                        Toast.makeText(getActivity(),"Edited",Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        Toast.makeText(getActivity(),"Deleted",Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            });

        return false;
    }
});

请帮帮我

【问题讨论】:

标签: android listview


【解决方案1】:
 public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// your code
return true
}

return true 而不是return false 将阻止点击事件继续。

【讨论】:

    【解决方案2】:

    您必须通过返回 true 来告知其他侦听器已使用分派的事件

    【讨论】:

      【解决方案3】:

      处理长按事件与处理点击基本相同,只是您返回一个布尔值,用于指定 Android 是否应继续传播点击事件。

      lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
      @Override
      public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id){
          return onLongListItemClick(v,pos,id);
      }
      

      });

      如果您的长按方法返回 true,那么您就是在告诉 Android 您处理了该事件。如果您的方法返回 false,Android 仍将调用其他处理程序,例如您的 onItemClick 处理程序。

      protected boolean onLongListItemClick(View v, int pos, long id) {
      Log.i(TAG, "onLongListItemClick id=" + id);
      return true;
      

      }

      所以更改代码的最后一行以返回 TRUE。

      【讨论】:

        【解决方案4】:

        返回boolean true:

         listregional.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                    final CharSequence[] dialogregion = {"Edit","Delete"};
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle("Pilih Menu");
                    builder.setItems(dialogregion, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int region) {
                           switch (region){
                               case 0:
                                   Toast.makeText(getActivity(),"Edited",Toast.LENGTH_SHORT).show();
                                   break;
                               case 1:
                                   Toast.makeText(getActivity(),"Deleted",Toast.LENGTH_SHORT).show();
                                   break;
                           }
                        }
                    });
                    return true;
                }
            });
        

        【讨论】:

          猜你喜欢
          • 2017-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多