Android 试图通过另一个活动过滤listview中的项目,如何更新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

我在google/stack上查看了一些示例,但没有找到解决问题的好方法

在显示listview的活动中,我得到了一个过滤器(winesCopy是wines列表的副本):

我想我应该在这里使用notifyDatasetChange()

但listview并不令人耳目一新

编辑我现在更改了一点代码,并使其正常工作


解决方案作为答案发布。

尝试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();
              }
        });