Как сделать так, чтобы данные в портретном режиме отображали данные с точно такой же позицией / индексом при переключении в ландшафтный режим? - PullRequest
0 голосов
/ 25 февраля 2020

В настоящее время я работаю с приложением, которое выполняет 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...