Вот мой метод:ListView не обновляя onRestoreSaveInstanceState
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
DataBaseHandler handler = new DataBaseHandler(getApplicationContext());
//set the spinner for measurement type
Spinner measurementTypeSpinner = (Spinner) findViewById(R.id.MeasurementTypes);
ArrayAdapter adapter = (ArrayAdapter) measurementTypeSpinner.getAdapter();
int typePos = adapter.getPosition(savedInstanceState.getString("measurementtype"));
measurementTypeSpinner.setSelection(typePos);
//set the spinner for the measurement unit
Spinner measurementUnitSpinner = (Spinner) findViewById(R.id.MeasurementSubValues);
ArrayAdapter arrayAdapter = (ArrayAdapter) measurementUnitSpinner.getAdapter();
int unitPos = arrayAdapter.getPosition(savedInstanceState.getString("measurementunit"));
measurementUnitSpinner.setSelection(unitPos);
//set the value
EditText value = (EditText) findViewById(R.id.unit_value);
value.setText(savedInstanceState.getString("value"));
/**
* The list view stuff
*/
ListView unitsList = (ListView) findViewById(R.id.units_list);
unitsList.setItemsCanFocus(true);
MeasurementType mType = handler.getMeasurementType(savedInstanceState.getString("measurementtype"));
//create the converter
Converter converter = new Converter(MeasurementType.getMeasurementType(savedInstanceState.getString("measurementtype")), savedInstanceState.getString("measurementunit"), savedInstanceState.getString("value"));
//convert the values
ArrayList<Unit> convertedValues = converter.convert();
//set the adapter for the list view
unitAdapter = new UnitListAdapter(this, convertedValues, mType);
unitsList.setAdapter(unitAdapter);
}
В принципе, есть другая деятельность с перечнем предметов и когда пользователь проверяет один, он обновляет устанавливая ИНТ свойство 1, так что база данных когда ArrayAdapter проходит через arraylist, он выбирает свойство как 1 и отображает его вместо 0, и в этом случае он не отображает его.
Теперь при нажатии кнопки «Назад» оба витка заполняются сохраненными значениями, значение для EditText восстанавливается, но ListView не обновляется, но когда я покидаю приложение и вернусь, значение который был проверен, есть в списке ...
Это говорит мне, что мне может понадобиться что-то сделать с помощью onStop() и onRestart(), если кто-то угодит мне советом. Комментарий, говорящий «материал списка списка», я пытаюсь обновить представление списка, он просто не работает, и когда я его отлаживаю, он вообще не войдет в метод восстановления, что путает.
EDIT
public class UnitListAdapter extends ArrayAdapter<Unit> {
private Context context;
private ArrayList<Unit> units;
private MeasurementType type;
public UnitListAdapter(Context context, ArrayList<Unit> units, MeasurementType type) {
super(context, R.layout.unit, R.id.unit_name, units);
this.context = context;
this.units = units;
this.type = type;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.unit, parent, false);
final TextView unitName = (TextView) rowView.findViewById(R.id.unit_name);
final EditText unitValue = (EditText) rowView.findViewById(R.id.unit_value);
if(units.get(position) != null) {
if(units.get(position).getView() == 1) {
unitName.setText(units.get(position).getUnitName());
unitValue.setText(units.get(position).getValue().toString());
} else {
unitName.setVisibility(View.GONE);
unitValue.setVisibility(View.GONE);
}
}
return rowView;
}
@Override
public void add(Unit u) {
units.add(u);
notifyDataSetChanged();
}
@Override
public void clear() {
units.clear();
notifyDataSetChanged();
}
@Override
public int getCount() {
return units.size();
}
}
Как просили. Извините за путаницу во время редактирования.
Я пробовал сделать это: ArrayAdapter currentAdapter = (ArrayAdapter ) unitsList.getAdapter(); currentAdapter.clear(); для (Unit u: convertValues) { currentAdapter.add (u); currentAdapter.notifyDataSetChanged(); } currentAdapter.notifyDataSetChanged(); Я подумал, что было бы лучше получить текущий базовый адаптер, очистить его значения и просто добавить новые значения из списка arrayList, а затем попытаться обновить представление списка как таковое ... но это тоже не сработало. –
user2405469
Я также попытался использовать метод invalidate(), но это не сработало. – user2405469