OnClickListener не вызывается в представлении переработчика - PullRequest
0 голосов
/ 30 марта 2019

Я использую SwipeRevealLayout для одного элемента в обзоре переработчика, а также хочу прикрепить к нему OnClickListener. Это мой XML-файл макета одного элемента:

<com.chauthai.swipereveallayout.SwipeRevealLayout
    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="wrap_content"
    app:mode="normal"
    app:dragEdge="left"
    android:clickable="true">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        android:padding="8dp"
        android:gravity="center_vertical"
        android:clickable="false">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_archive"
            android:clickable="false"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Archive"
            android:id="@+id/id_text_archive"
            android:textSize="24sp"
            android:textColor="@color/colorTextLight"
            android:clickable="false"/>

    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:padding="8dp"
        android:clickable="false">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test Chat Name"
            android:textSize="24sp"
            android:textColor="@android:color/black"
            android:id="@+id/id_text_chat_head"
            android:clickable="false"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test Chat Name"
            android:textSize="18sp"
            android:textColor="@color/colorChatroomSubTitle"
            android:id="@+id/id_text_chat_sub_head"
            android:clickable="false"/>

    </LinearLayout>

</com.chauthai.swipereveallayout.SwipeRevealLayout>

Вот мой код пользователя:

public class ChatHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        @BindView(R.id.id_text_chat_head)
        TextView mChatHead;
        @BindView(R.id.id_text_chat_sub_head)
        TextView mChatSubHead;
        @BindView(R.id.id_text_archive)
        TextView mTextArchive;

        private View mView;

        private AnonymousReport mAnonymousReport;

        public ChatHolder(@NonNull View itemView) {
            super(itemView);

            mView = itemView;

            ButterKnife.bind(this, itemView);
            itemView.setOnClickListener(this);
        }

        public SwipeRevealLayout getSwipeRevealLayout() {
            return ((SwipeRevealLayout) mView);
        }

        public void bindView(AnonymousReport report) {
            mAnonymousReport = report;

            mChatHead.setText(report.getSubject());
            mChatSubHead.setText(report.getAnonTypeText(mContext));

            mTextArchive.setText(isArchived ? "Unarchive" : "Archive");
        }

        @Override
        public void onClick(View v) {
            startActivity(AnonymousReportDetailsActivity.newIntent(mContext, mAnonymousReport));
        }
    }

Я попытался подключить OnActionEvent, и это работает, но мне не нужно, чтобы OnClickListner работал. Может кто-нибудь помочь мне разобраться в проблеме? Спасибо

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Так что я решил проблему, получил помощь от официального github Repo SwipeRevealLayout.Вот ссылка на оригинальное сообщение Вот что он сказал:

Вы можете установить onClick для основного макета и вторичного макета, но вы не можете установить onClick для всего swipeRevealLayout.

Поэтому я изменил свой код соответствующим образом, и он заработал.

<com.chauthai.swipereveallayout.SwipeRevealLayout
    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="wrap_content"
    app:mode="normal"
    app:dragEdge="left">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/colorPrimary"
        android:padding="8dp"
        android:gravity="center_vertical"
        android:id="@+id/id_chat_room_item"
        android:clickable="true">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_archive"
            android:clickable="false"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Archive"
            android:id="@+id/id_text_archive"
            android:textSize="24sp"
            android:textColor="@color/colorTextLight"
            android:clickable="false"/>

    </LinearLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:padding="8dp"
        android:clickable="false">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test Chat Name"
            android:textSize="24sp"
            android:textColor="@android:color/black"
            android:id="@+id/id_text_chat_head"
            android:clickable="false"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Test Chat Name"
            android:textSize="18sp"
            android:textColor="@color/colorChatroomSubTitle"
            android:id="@+id/id_text_chat_sub_head"
            android:clickable="false"/>

    </LinearLayout>

</com.chauthai.swipereveallayout.SwipeRevealLayout>
0 голосов
/ 30 марта 2019

Из документации RecyclerView.ViewHolder:

ViewHolder описывает представление элемента и метаданные о его месте в RecyclerView. Реализации RecyclerView.Adapter должны наследовать ViewHolder и добавлять поля для кэширования потенциально дорогих результатов findViewById (int).

Пользовательские реализации ViewHolder в основном используются для целей кэширования, что означает, что строка ниже не имеет никакого эффекта, поскольку вы устанавливаете слушателя в контейнер хранилища данных.

itemView.setOnClickListener(this);

Решение состоит в том, чтобы установить слушателя на фактический itemView (вероятно, непосредственно перед вызовом ChatHolder (itemView)).

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

...