在多次点击按钮期间,listview会多次填充相同的值

时间:2016-03-08 10:36:03

标签: android listview checkedtextview

我在文件list.xml中有一个带有listview的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加载国家/地区列表按钮。国家列表项目已列出一些国家/地区

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都会填充值。因此列表视图具有多次显示的相同值。

2 个答案:

答案 0 :(得分:2)

我建议您在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();
        }
    });

希望这会帮助你。

答案 1 :(得分:0)

只是你将此方法“initCountryList()”调用到onclick侦听器之外