使用 onClick 从适配器更改 ListView 项目布局

Changing ListView item layout from adapter with onClick

我正在使用列表视图,我在 raw.xml 中有 2 种不同的布局,我试图通过它们在我的自定义列表视图适配器 class 中的可见性(GONE,VISIBLE)来控制它们。我想更改特定项目的布局 onClick。但是当我点击listview项目时,即使我不点击it.Here也只有最后一个项目的布局效果是我提前的code.Thanks。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/advertisement_expandable"
    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">
    <LinearLayout
        android:id="@+id/layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        .
        .
        .
    </LinearLayout>

    <RelativeLayout
        android:layout_margin="10dp"
        android:id="@+id/layout2"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        .
        .
        .
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

在我正在使用的适配器上;

RawView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(currentAdvertisement.isExpanded){
                    layout1.setVisibility(View.VISIBLE);
                    layout2.setVisibility(View.GONE);
                    currentAdvertisement.isExpanded=false;
                }else{
                    layout1.setVisibility(View.GONE);
                    layout2.setVisibility(View.VISIBLE);
                    currentAdvertisement.isExpanded=true;
                }
            }
        });

我想你需要这样的东西

RawView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                View layout1 = v.findViewById(R.id.layout1);
                View layout2 = v.findViewById(R.id.layout2);

                if(currentAdvertisement.isExpanded){
                    layout1.setVisibility(View.VISIBLE);
                    layout2.setVisibility(View.GONE);
                    currentAdvertisement.isExpanded=false;
                }else{
                    layout1.setVisibility(View.GONE);
                    layout2.setVisibility(View.VISIBLE);
                    currentAdvertisement.isExpanded=true;
                }
            }
        });

否则,如果你在你的适配器中膨胀它,你总是覆盖两个变量,它们总是指最后膨胀的视图