#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()
?