【问题标题】:Why In custom listview is not working with setOnItemClickListner?为什么在自定义列表视图中不能与 setOnItemClickListner 一起使用?
【发布时间】:2018-07-18 09:30:30
【问题描述】:

我有一个列表视图,其中有两个文本视图,每行有一个编辑文本 listView.setOnItemClickListener() 不起作用。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               Log.e("position", String.valueOf(position));
           }
       });

Log.e("position", String.valueOf(position)); 不显示在 Logcat 上

【问题讨论】:

标签: java android list listview


【解决方案1】:

如果您的项目与模型一起提供,则在您的 setOnItemCLickListner 中创建模型的对象,如下面的代码,然后根据位置从模型中获取数据。

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        ActivityModel booking = movieList.get(position);
                        String id = booking.getActivityId();
                        Toast.makeText(this, id , Toast.LENGTH_LONG).show();

                    }
                });

在您的 XML 中,在列表视图中添加以下属性。

android:focusable="false"

【讨论】:

    【解决方案2】:

    我认为重点是EditText。在 XML 中将此添加到您的 editText 视图 android:focusable="false"

    进一步阅读:https://stackoverflow.com/a/8955441/5954246

    【讨论】:

      【解决方案3】:

      这是因为 editText 正在消耗您的焦点,因此没有点击被注册。

      当我为 EditText 设置 android:focusable="false" 时,ListView 项目上的 onItemClick 正在工作,但是当我点击里面时 EditText 没有得到光标。

      如果我为 EditText 设置android:focusable="true",那么 EditText 是可聚焦的,但是当我单击 ListView 时,它的 onItemClick 不起作用。

      所以用这种方式修改你的适配器:

          public class AdapterListCards extends CursorAdapter implements View.OnTouchListener {
       public AdapterListCards(Context context) {
          super(context, null, true);
       }
      
       @Override
       public boolean onTouch(View view, MotionEvent motionEvent) {
          if (view instanceof EditText) {
              EditText editText = (EditText) view;
              editText.setFocusable(true);
              editText.setFocusableInTouchMode(true);
          } else {
              ViewHolder holder = (ViewHolder) view.getTag();
              holder.edtCode.setFocusable(false);
              holder.edtCode.setFocusableInTouchMode(false);
          }
          return false;
       }
      
       private class ViewHolder {
          TextView txtName;
          EditText edtCode;
      }
      
       @Override
       public View newView(final Context context, Cursor cursor, ViewGroup parent) {
          View convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
          final ViewHolder holder = new ViewHolder();
          holder.txtName = (TextView) convertView.findViewById(R.id.txt_name);
          holder.edtCode = (EditText) convertView.findViewById(R.id.pass);
          holder.edtCode.setOnTouchListener(this);
          convertView.setOnTouchListener(this);
          convertView.setTag(holder);
      
          return convertView;
       }
      
      @Override
      public void bindView(View view, Context context, Cursor cur) {
          ViewHolder holder = (ViewHolder) view.getTag();
          if (cur!=null) holder.txtName.setText(cur.getString(cur.getColumnIndex("name")));
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-13
        • 1970-01-01
        • 2017-10-22
        • 2022-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        相关资源
        最近更新 更多