Android 试图通过另一个活动过滤listview中的项目,如何更新listview?
我在google/stack上查看了一些示例,但没有找到解决问题的好方法 在显示listview的活动中,我得到了一个过滤器(winesCopy是wines列表的副本): 我想我应该在这里使用notifyDatasetChange() 但listview并不令人耳目一新 编辑我现在更改了一点代码,并使其正常工作Android 试图通过另一个活动过滤listview中的项目,如何更新listview?,android,listview,android-listview,notifydatasetchanged,Android,Listview,Android Listview,Notifydatasetchanged,我在google/stack上查看了一些示例,但没有找到解决问题的好方法 在显示listview的活动中,我得到了一个过滤器(winesCopy是wines列表的副本): 我想我应该在这里使用notifyDatasetChange() 但listview并不令人耳目一新 编辑我现在更改了一点代码,并使其正常工作 解决方案作为答案发布。尝试startActivityForResult()而不是startActivity(),如果控件从对话框活动返回,请在onActivityResult()中调用a
解决方案作为答案发布。尝试startActivityForResult()而不是startActivity(),如果控件从对话框活动返回,请在onActivityResult()中调用adapter.notifyDataSetChanged()放置筛选器方法的活动
public static List<Wine> filterByCountry(String country) {
if (country.equals("")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getCountry().contains(country)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByTaste(String taste) {
if (taste.equals("")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getTaste().contains(taste)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByYear(int year ) {
if (Integer.valueOf(year)==null) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getYear()!=year) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByBiologic(boolean biologic) {
if (!biologic) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getBiologic()!=biologic) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterBySparkling(boolean sparkling) {
if (!sparkling) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getSparkling()!=sparkling) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByColor(String color) {
if (color.equals("all")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getCountry().contains(color)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static void clearFilter()
{
adapter.clear();
for(Wine wine : winesCopy)
{
adapter.add(wine);
}
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
filteredList = new ArrayList<Wine>(wines);
}
public static void setFilter()
{
adapter.clear();
for(Wine wine : filteredList)
{
adapter.add(wine);
}
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
尝试写入适配器。notifyDataSetChanged();在startActivity()之前;我尝试了silvia,但也没有成功。然后再次尝试将适配器设置为listview。如下所示:listview.setAdapter(适配器);adapter.notifyDataSetChanged();低压设置适配器(适配器);星触觉(i)//adapter.notifyDataSetChanged()//低压设置适配器(适配器);尝试过这个,或者在startactivity之后,它不起作用。
Button btnSubmit = (Button) findViewById(R.id.activity_btn_add_filter);
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(!etLand.equals(null))
{
ListWineView.filterWinesString(ListWineView.winesCopy,etLand.getText().toString());
}
if(!etTaste.equals(null)){
ListWineView.filterWinesString(ListWineView.winesCopy,etTaste.getText().toString());
}
if(!etYear.equals(null)){
ListWineView.filterWinesString(ListWineView.winesCopy,etYear.getText().toString());
}
if(cbBiologic.isChecked()){
ListWineView.filterWinesString(ListWineView.winesCopy, "true");
}else{
ListWineView.filterWinesString(ListWineView.winesCopy, "false");
}
if(cbMouserend.isChecked()){
ListWineView.filterWinesString(ListWineView.winesCopy, "true");
}else{
ListWineView.filterWinesString(ListWineView.winesCopy, "false");
}
if(spinner1.getSelectedItemId()!=0){
ListWineView.filterWinesString(ListWineView.winesCopy,spinner1.getSelectedItem().toString());
}
ListWinesViewFilterActivity.this.finish();
}
});
}
btnFilter.setText("Filter");
btnFilter.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ListWineView.this, ListWinesViewFilterActivity.class);
startActivity(i);
adapter.notifyDataSetChanged();
}
});
public static List<Wine> filterByCountry(String country) {
if (country.equals("")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getCountry().contains(country)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByTaste(String taste) {
if (taste.equals("")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getTaste().contains(taste)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByYear(int year ) {
if (Integer.valueOf(year)==null) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getYear()!=year) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByBiologic(boolean biologic) {
if (!biologic) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getBiologic()!=biologic) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterBySparkling(boolean sparkling) {
if (!sparkling) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (wine.getSparkling()!=sparkling) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static List<Wine> filterByColor(String color) {
if (color.equals("all")) {
return wines;
}
ArrayList<Wine> winesFil = new ArrayList<Wine>(wines);
for(Wine wine : winesFil) {
if (!wine.getCountry().contains(color)) {
filteredList.remove(wine);
}
}
return filteredList;
}
public static void clearFilter()
{
adapter.clear();
for(Wine wine : winesCopy)
{
adapter.add(wine);
}
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
filteredList = new ArrayList<Wine>(wines);
}
public static void setFilter()
{
adapter.clear();
for(Wine wine : filteredList)
{
adapter.add(wine);
}
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
@Override
public void onClick(View v) {
ListWineView.clearFilter();
ListWineView.filterByCountry(etLand.getText().toString());
if(!etYear.getText().toString().equals("")){
ListWineView.filterByYear(Integer.valueOf(etYear.getText().toString()));
}
ListWineView.filterByTaste(etTaste.getText().toString());
ListWineView.filterByBiologic(cbBiologic.isSelected());
ListWineView.filterBySparkling(cbMouserend.isSelected());
ListWineView.filterByColor(spinner1.getSelectedItem().toString());
ListWineView.setFilter();
ListWinesViewFilterActivity.this.finish();
}
});