Snapchat, как кнопка «Добавить друга» в представлении переработчика Android - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь создать кнопку «Добавить друга в Snapchat» следующим образом -

enter image description here

Ниже приведен код для моего XML-макета элемента recylerView -

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="position"
            type="java.lang.Integer" />

        <variable
            name="viewModel"
            type="com.app.thingleapplication.viewModel.SearchFriendsViewModel" />
    </data>

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="3dp"
        android:elevation="3dp">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="5dp">

            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/data_holder"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toStartOf="@id/guideline2"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent">


                <TextView
                    android:id="@+id/search_result_name"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:ellipsize="end"
                    android:fontFamily="@font/avenirltstd_black"
                    android:maxLines="2"
                    android:paddingStart="10dp"
                    android:paddingLeft="10dp"
                    android:paddingTop="10dp"
                    android:paddingEnd="10dp"
                    android:paddingRight="10dp"
                    android:text="@{viewModel.getItemAt(position).userName}"
                    android:textSize="18sp"
                    app:layout_constraintBottom_toTopOf="@id/search_result_email"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintVertical_bias="0.1"
                    app:layout_constraintVertical_chainStyle="packed" />

                <TextView
                    android:id="@+id/search_result_email"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:drawableStart="@drawable/ic_action_email"
                    android:drawablePadding="5dp"
                    android:ellipsize="end"
                    android:fontFamily="@font/avenirltstd_book"
                    android:gravity="center_vertical"
                    android:lines="1"
                    android:paddingStart="10dp"
                    android:paddingTop="5dp"
                    android:paddingEnd="10dp"
                    android:paddingBottom="5dp"
                    android:text="@{viewModel.getItemAt(position).email}"
                    android:textSize="16sp"
                    app:layout_constraintBottom_toTopOf="@id/search_result_phone"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@id/search_result_name" />

                <TextView
                    android:id="@+id/search_result_phone"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:drawableStart="@drawable/ic_action_phone"
                    android:drawablePadding="5dp"
                    android:ellipsize="end"
                    android:fontFamily="@font/avenirltstd_book"
                    android:gravity="center_vertical"
                    android:lines="1"
                    android:paddingStart="10dp"
                    android:paddingTop="5dp"
                    android:paddingEnd="10dp"
                    android:paddingBottom="5dp"
                    android:text="@{viewModel.getItemAt(position).phone}"
                    android:textSize="14sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent" />


            </androidx.constraintlayout.widget.ConstraintLayout>

            <androidx.constraintlayout.widget.Guideline
                android:id="@+id/guideline2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                app:layout_constraintGuide_percent=".75" />


            <FrameLayout
                android:id="@+id/add_button"
                android:layout_width="80dp"
                android:layout_height="30dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:background="@drawable/add_friend_button_border"
                android:elevation="5dp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/guideline2"
                app:layout_constraintTop_toTopOf="parent">

                <TextView
                    android:id="@+id/button_add"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="@string/add_button"
                    android:textColor="@color/white"
                    android:visibility="visible"
                    android:textSize="16sp" />
                <ProgressBar
                    android:id="@+id/progress"
                    android:layout_width="16dp"
                    android:layout_height="16dp"
                    android:layout_gravity="center"
                    android:indeterminate="true"
                    android:visibility="gone"
                    android:theme="@style/progress" />


            </FrameLayout>

            <FrameLayout
                android:id="@+id/sent_button"
                android:layout_width="80dp"
                android:layout_height="30dp"
                android:layout_marginStart="10dp"
                android:layout_marginEnd="10dp"
                android:background="@drawable/sent_button_background"
                android:elevation="5dp"
                android:visibility="@{viewModel.getSentVisibility(position)}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@id/guideline2"
                app:layout_constraintTop_toTopOf="parent">

                <TextView
                    android:id="@+id/button_sent"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="@string/sent_button"
                    android:textColor="@color/white"
                    android:textSize="16sp" />

            </FrameLayout>


        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>
</layout>

Как мне переключить видимость индикатора выполнения внутри моего макета фрейма add_button в onBindViewholder. Я попробовал это ... это работает, но из-за повторного использования recyclerViews ... индикатор выполнения какого-то другого представления также начинает появляться в обзоре recycler, и текст "ADD" пропал. Кто-нибудь может мне помочь исправить это?

1 Ответ

1 голос
/ 25 октября 2019

Вы не опубликовали ни одного кода, кроме своего макета, и именно в этом заключается проблема. Да, просмотр рециркулятора может быть проблематичным, но все, что вам нужно сделать, - это настраивать видимость элемента управления каждый раз, а не только при его отображении. Вы также хотите специально установить его невидимым везде. Вы ДОЛЖНЫ сделать это, потому что, как вы знаете, элементы управления используются повторно. Это означает, что их настройки, такие как видимость, также используются повторно.

Вы хотите увидеть что-то странное, попробуйте это с правкой.

...