在多次单击按钮期间,列表视图多次填充相同的值

listview is populated with same value multiple times during multiple button clicks

我在文件 list.xml

中有一个带有列表视图的 xml 文件
    <LinearLayout>

<Button
    android:id="@+id/countryfilter"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="Load Country data"/>


<Button
    android:id="@+id/domain_filter"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="Load Domain data"/>

    <ListView
                android:id="@+id/listContents"
                android:layout_width="wrap_content"
                android:visibility="gone"
                android:layout_height="wrap_content">
            </ListView>
     </LinearLayout>

以下是我在 row.xml

中的代码
 <CheckedTextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Some text here"
        android:textSize="18sp"
        android:gravity="center_vertical"
        android:clickable="true"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:focusable="true"
        android:checked="false"
        android:onClick="toggle"/>

在 运行 时间内,列表视图将变为可见并设置其数据。

我在这里为加载国家/地区列表按钮设置 onClickListener。 Countrylist item 有一些国家的列表

countryListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lv.setVisibility(View.VISIBLE);
            initCountryList();

            customAdapter = new CustomAdapter(
                    getApplicationContext(), R.layout.filters, android.R.id.text1, countryList
            );
            lv.setAdapter(customAdapter);
        }
    });

我在这里为加载域列表按钮设置 onClickListener。 domainList 包含域列表

domainListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lv.setVisibility(View.VISIBLE);
            initDomainList();
            domainAdapter = new CustomAdapter(getApplicationContext(), R.layout.filters, android.R.id.text1, domainList
            );
            lv.setAdapter(domainAdapter);
        }
    });

问题是,

每次单击按钮时,列表视图都会填充值。所以 listview 有相同的值被多次显示。

只是你在 onclick 侦听器之外调用了这个方法"initCountryList()"

我建议您在 onCreate() 中初始化和分配适配器,而不是在单击按钮时多次初始化。由于模型相同,因此无需创建两个单独的列表和适配器。

onCreate()

// Initialize list and assign it to adapter
dataList = new ArrayList<>();
adapter = new CustomAdapter(getApplicationContext(), R.layout.filters, android.R.id.text1, dataList
            );
lv.setAdapter(adapter);

来到按钮点击监听器,只需清除列表,然后添加国家或域列表,最后调用 adatper.notifyDataSetChanged()

countryListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lv.setVisibility(View.VISIBLE);
            // In this method, clear the list first then add the countries list
            initCountryList();
            adapter.notifyDataSetChanged();
        }
    });

    domainListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            lv.setVisibility(View.VISIBLE);
            // Same as countries list
            initDomainList();
            adapter.notifyDataSetChanged();
        }
    });

希望这对您有所帮助。