我在文件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都会填充值。因此列表视图具有多次显示的相同值。
答案 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侦听器之外