Как получить ссылки на элементы (просмотр изображений) в xml-макете в Android

#android #xml #android-adapter

Вопрос:

У меня есть следующий макет списка, который раздувается в адаптере:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@ id/rootView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <ImageView
                android:id="@ id/background"
                android:layout_width="match_parent"
                android:layout_height="180dp"
                android:layout_centerHorizontal="true"
                app:srcCompat="@drawable/gamefield_background" />


            <ImageView
                android:id="@ id/away"
                android:layout_width="160dp"
                android:layout_height="150dp"
                android:layout_gravity="top|left"/>


            <ImageView
                android:id="@ id/home"
                android:layout_width="160dp"
                android:layout_height="150dp"
                android:layout_gravity="top|right"
                android:scaleX="-1"/>

        </androidx.cardview.widget.CardView>
        
    </FrameLayout>

</LinearLayout>
 

Внутри моего java-класса адаптера у меня есть setOnClickListener, который прослушивает клики по изображениям.

В настоящее время список состоит из 10 просмотров изображений, основанных на следующем фрагменте кода:

 @Override
public void onBindViewHolder(GameViewHolder holder, int position) {

    final Games game = gameList.get(position);

    holder.homeImageView.setBackgroundResource(awayResourceId);

    holder.awayImageView.setBackgroundResource(awayResourceId);

}
 

Вышеизложенное повторяет список игр и добавляет изображение для домашней и выездной команд, что создаст 5 элементов в списке, где каждый элемент имеет 2 просмотра изображений, один для дома и один для гостей.

То, что я хочу сделать, — это когда пользователь нажимает на одно из изображений, элемент выбирается (фон выделен), что отлично работает.

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

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

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

Кто-нибудь знает, как я могу этого добиться?

Комментарии:

1. highlight *every* imageview the user clicks. Тебе это ни о чем не говорит? Получите ссылку на каждый элемент; выделите тот, который вы хотите.

Ответ №1:

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

 private ImageView previousHomeIv;
private ImageView previousAwayIv;
 

Тогда внутри себя OnBindViewHolder вы можете сделать что-то вроде этого

 @Override
public void onBindViewHolder(GameViewHolder holder, int position) {

    final Games game = gameList.get(position);
    if(previousHomeIv != null) { 
    // Do Stuff Here
    }
    if(previousAwayIv!= null) { 
    // Do Stuff Here
    }

    holder.homeImageView.setBackgroundResource(awayResourceId);

    holder.awayImageView.setBackgroundResource(awayResourceId);
    previousHomeIv = holder.homeImageView;  // Assign current
    previousAwayIv= holder.awayImageView;

}
 

Комментарии:

1. Это было то, что я искал, как объявить просмотры изображений в Java!! Извините, я новичок в Android и понятия не имел!