В настоящее время я работаю с приложением, которое выполняет 2 действия: ListActivity и EditActivity. Цель ListActivity состоит в том, чтобы реализовать просмотрщик, который содержит изображение, слово, описание слова и рейтинг. Данные изображения, имени и описания уже известны, и рейтинг можно установить с помощью панели поиска в EditActivity. Я уже обработал взаимодействие между этими двумя действиями и могу показывать рейтинг в ListActivity после того, как он был установлен в EditActivity.
Моя цель теперь состоит в том, чтобы реализовать простой onSaveInstanceState, чтобы я мог сохранять состояние и не потерять любые данные, когда я переключаюсь в ландшафт. Я пытался это сделать, но по какой-то причине ListActivity «захватывает» последнее установленное мной значение рейтинга и показывает следующее значение в позиции / индексе 0.
Почему здесь может возникнуть проблема? Я не вижу проблемы.
ListActivity:
public class ListActivity extends AppCompatActivity implements WordAdapter.OnItemListener {
private ArrayList<WordItem> mWords = new ArrayList<>();
private WordAdapter mAdapter;
private static final int REQUEST_CODE_DETAILS_ACTIVITY = 1;
Button exitBtn;
TextView txtRating;
String rating, note;
int wordClickedIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
setUpViews();
if (savedInstanceState != null) {
rating = savedInstanceState.getString(getString(R.string.key_rating));
WordItem i = mWords.get(wordClickedIndex);
i.setRating(rating);
// mWords.set(wordClickedIndex, i);
// mAdapter.updateData(mWords);
// mAdapter.notifyDataSetChanged();
}
}
public void setUpViews() {
RecyclerView mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
mAdapter = new WordAdapter(mWords, this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setAdapter(mAdapter);
}
@Override
public void onItemClick(int position) {
Intent intent = new Intent(this, DetailsActivity.class);
WordItem clickedWord = mWords.get(position);
wordClickedIndex = position;
intent.putExtra("resId", clickedWord.getImageResource());
intent.putExtra(getString(R.string.key_name), clickedWord.getWord());
intent.putExtra(getString(R.string.key_pronouncing), clickedWord.getPronouncing());
intent.putExtra(getString(R.string.key_description), clickedWord.getDescription());
intent.putExtra(getString(R.string.key_rating), clickedWord.getRating());
intent.putExtra(getString(R.string.key_notes), clickedWord.getNotes());
startActivityForResult(intent, REQUEST_CODE_DETAILS_ACTIVITY);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_DETAILS_ACTIVITY) {
if (resultCode == RESULT_OK) {
if (data != null) {
rating = data.getStringExtra(getString(R.string.key_rating));
note = data.getStringExtra(getString(R.string.key_notes));
WordItem i = mWords.get(wordClickedIndex);
i.setRating(rating);
i.setNotes(note);
mWords.set(wordClickedIndex, i);
mAdapter.updateData(mWords);
mAdapter.notifyDataSetChanged();
}
}
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
// WordItem i = mWords.get(wordClickedIndex);
outState.putString(getString(R.string.key_rating), rating);
super.onSaveInstanceState(outState);
}
}