Должно работать как listview setOnItemClickListener, так и edittext, редактируемые в настраиваемом просмотре списка - PullRequest
0 голосов
/ 06 июля 2018

Проблема: Когда я устанавливаю android:focusable="false", android:focusableInTouchMode="false" для элемента списка editTexview, editText не может быть сфокусировано, если я удалю эти 2 строки кода, listView setOnItemClickListener не будет работать. Мое требование должно работать оба.

Мой пользовательский элемент списка XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="@drawable/comment_bg"
     android:orientation="vertical">

     <EditText
         android:id="@+id/list_item_post_edittext_add_comment"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_margin="@dimen/layout_margin_10"
         android:background="@drawable/comment_bg"
         android:drawableEnd="@mipmap/ic_send_dark_48"
         android:drawablePadding="@dimen/layout_margin_10"
         android:drawableRight="@mipmap/ic_send_dark_48"
         android:hint="Add a Comment..."
         android:inputType="text"
         android:padding="@dimen/layout_margin_10"
         android:textColor="@color/colorPrimaryDark"
         android:textColorHint="@color/colorGray"
         android:textSize="12sp" />

</LinearLayout/>

1 Ответ

0 голосов
/ 06 июля 2018

Установить onTouchlistener на просмотр отдельного элемента в классе адаптера. Кроме того, вы должны управлять состоянием списка таким образом, чтобы при прокрутке списка onTouch был отключен, а когда он не прокручивался, он работал как обычно. Он отлично работает с точки зрения переработчика в моем проекте. Должно работать и с ListView.

itemView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {

                if(!isScrolling)
                {
                    Toast.makeText(mContext, "Item clicked ", Toast.LENGTH_SHORT).show();
                }

                return false;
            }
        });

и для управления флагом isScrolling,

rv.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if(newState == SCROLL_STATE_DRAGGING)
            {
                isScrolling=true;
            }
            else
            {
                isScrolling=false;
            }
        }
    });
...