Фильтровать объекты, используя действие предпочтения

#android #filter #android-preferences

#Android #Фильтр #android-настройки

Вопрос:

У меня есть действие предпочтения в моем приложении, где я выбираю из списка предпочтений. После выбора моей практики я хочу использовать это выбранное значение для фильтрации моих данных по практике на фрагменте. Я могу получить значение, которое я выбрал на экране настроек, но оно просто не фильтруется.

Это то, что у меня есть до сих пор:

PreferenceActivity:

 @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);

        entries = new ArrayList<>();
        entryValues = new ArrayList<>();
        practicesListPreference = (ListPreference) findPreference("my_practice_setting");

        populatePracticeListPreference();

        SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
        sp.edit().putString(KEY_PREF_MY_PRACTICE_ID, JsonDataParser
                .practiceNameAndIdMap.get(sp.getString(KEY_PREF_MY_PRACTICE, ""))).apply();
        String s = sp.getString(KEY_PREF_MY_PRACTICE_ID,"NONE");

        practicesListPreference.setSummary(sp.getString(KEY_PREF_MY_PRACTICE, "All"));

        int storedPreference = sp.getInt("storedInt", 0);
        SharedPreferences.Editor editor = sp.edit();
        editor.putInt("storedInt", storedPreference); // value to store
        editor.commit();
    }
  

и это фрагмент, который я использую для фильтрации:

  practiceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

            String pid=sharedPreferences.getString(PreferencesActivity.KEY_PREF_MY_PRACTICE,"");
                if(practiceSpinnerAdapter.isEmpty()){
                    practiceSpinnerAdapter.add("All");
                }

                pid = practiceSpinnerAdapter.getItem(i);
                mAdapter.clear();
                mAdapter.addAll(filterAssetsList(pid));
  

и мой метод фильтрации внутри фрагмента:

    private List<Asset> filterAssetsList(String filterString){
    List<Asset> filteredAssets = new ArrayList<>();
    if(JsonDataParser.assetsList!=null){
        if(filterString.equals("All")){
           return JsonDataParser.assetsList;
        }
        for (Asset asset: JsonDataParser.assetsList ) {
           // String s= asset.getPracticeID();
            if(asset.getPracticeID().equals(filterString)){
                filteredAssets.add(asset);
            }
        }
    }
    return filteredAssets;
}
  

Что я делаю не так?

Комментарии:

1. попробуйте добавить оператор return в конце метода filterAssetsList

2. Я сделал это, все еще не работает

3. итак, я полагаю, вы выполнили пошаговую отладку своего filterAssetsList метода? что getPracticeID возвращает?

4. да, и он получает правильные отфильтрованные элементы, но не отображает их

5. вызывается mAdapter.notifyDataSetChanged() ?