#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 и понятия не имел!