在多次单击按钮期间,列表视图多次填充相同的值
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();
}
});
希望这对您有所帮助。
我在文件 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();
}
});
希望这对您有所帮助。