如何在 Android 的 xml 布局中获取对项目 (imageView) 的引用

How to get references to items (imageView) in the xml layout in Android

我有以下在适配器中膨胀的列表布局:

<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 class 我有一个 setOnClickListener 用于监听 ImageViews 上的点击。

当前列表由 10 个 ImagesView 组成,基于以下代码片段:

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

    final Games game = gameList.get(position);

    holder.homeImageView.setBackgroundResource(awayResourceId);

    holder.awayImageView.setBackgroundResource(awayResourceId);

}

以上遍历 gameList 并添加主队和客队的图像,这将在列表中创建 5 个项目,每个项目有 2 个 imageView,一个用于主场,一个用于客场。

我想要做的是当用户点击其中一个 imageViews 时,项目被选中(背景突出显示),这非常有效。

现在的问题是,如果用户单击不同的 imageView,我希望取消突出显示之前选择的 imageView。

目前我所能做的就是突出显示用户点击的每个图像视图。

每次单击新的 imageView 时,我如何才能获得对其他 imageviews 的引用,应该进行循环以重置上一个所选项目的背景并突出显示当前所选项目。

有谁知道我怎样才能做到这一点?

创建一个顶层 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;

}