0

google/stack でいくつかのサンプルを調べましたが、私の問題に対する適切な解決策が見つかりませんでした。

リストビューが表示されるアクティビティで、フィルターが作成されました(winesCopyはワインリストのコピーです):

public static List<Wine> filterWinesString(List<Wine> wines, Object filterItem)
    {
        for(Wine o : wines)
        {
            if(o.getColor().equals((String)filterItem)||o.getCountry().equals((String)filterItem)||o.getDescription().equals((String)filterItem)||o.getTaste().equals((String)filterItem)||
                    o.getBiologic().equals(filterItem)||o.getSparkling().equals(filterItem)||filterItem.equals(o.getYear()))
            {
                filteredList.add((Wine) o);
            }
        }
        if(!filteredList.equals(null))
        {
            wines= filteredList;
        return wines;
        }
        else{
            return wines;
        }
    }

    public static void clearFilter()
    {
        filteredList.clear();
        wines=winesCopy;
    }

そして、「ダイアログ」として使用するアクティビティで:

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

      }

ここで notifyDatasetChange() を使用する必要があると思いました:

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

しかし、リストビューは更新されていません。

編集私は今、コードを少し変更し、それを機能させました。

回答として投稿されたソリューション。

4

2 に答える 2

1

startActivity() の代わりに startActivityForResult() を試し、onActivityResult() でダイアログ アクティビティからコントロールが返された場合は、adapter.notifyDataSetChanged() を呼び出します。

于 2013-11-05T11:25:18.113 に答える