У меня есть переключатель, который при нажатии на него заполняет RecyclerView
и пытается сохранить состояние в течение жизненного цикла.
Это xml
<Switch
android:id="@+id/reviewLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/eight_dp"
android:textColor="@android:color/white" />
Этослушатель
private class ShowReviewsListener implements CompoundButton.OnCheckedChangeListener{
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
if(isChecked == true){
showReviews();
isReviewButtonClicked = true;
}else if(isChecked == false){
isReviewButtonClicked = false;
}
}
}
Вот что происходит, когда вы щелкаете по нему
public void showReviews() {
mReviewList.setHasFixedSize(true);
mReviewList.setVisibility(View.VISIBLE);
fakeView2.setVisibility(View.VISIBLE);
}
Вот как я пытаюсь сохранить его и получить его
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt(INSTANCE_MOVIE_ID, mMovieId);
outState.putBoolean(IS_IN_FAVORITES, isInFavsAlready);
outState.putBoolean(REVIEW_BUTTON, isReviewButtonClicked);
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_movie_detail);
mDb = AppDatabase.getInstance(getApplicationContext());
mToolbar = findViewById(R.id.toolbar);
mToolbar.setTitle(R.string.movie_details_title);
ButterKnife.bind(this);
if (savedInstanceState != null && savedInstanceState.containsKey(INSTANCE_MOVIE_ID)) {
mMovieId = savedInstanceState.getInt(INSTANCE_MOVIE_ID, DEFAULT_MOVIE_ID);
}
if(savedInstanceState !=null && savedInstanceState.containsKey(IS_IN_FAVORITES)){
isInFavsAlready = savedInstanceState.getBoolean(IS_IN_FAVORITES, false);
}
if(savedInstanceState !=null && savedInstanceState.containsKey(REVIEW_BUTTON)){
isReviewButtonClicked = savedInstanceState.getBoolean(REVIEW_BUTTON, false);
}
Log.d(LOG_TAG, "review button " + isReviewButtonClicked);
Intent i = getIntent();
if (i != null && i.hasExtra(EXTRA_MOVIE)) {
if (mMovieId == DEFAULT_MOVIE_ID) {
mMovieId = i.getIntExtra(EXTRA_MOVIE, DEFAULT_MOVIE_ID);
mMovie = i.getParcelableExtra(EXTRA_MOVIE);
populateUI(mMovie);
}
}
setTrailers();
setReviews();
if (isReviewButtonClicked) {
showReviews();
}
int movieID = Integer.parseInt(mMovie.getMovieId());
isMovieInFavorites(movieID);
reviewSwitch.setOnCheckedChangeListener(new ShowReviewsListener());
favoriteToggle.setOnCheckedChangeListener(new FavoriteListener());
}
Прямо сейчас дажехотя isChecked имеет значение true, всякий раз, когда я поворачиваю устройство, виды из showReviews () остаются скрытыми.
РЕДАКТИРОВАТЬ: добавлено полное наСоздать & изображение
Отзывы ручка
private class FetchReviewsAndTrailersTask extends AsyncTask<URL, Void, String[]> {
@Override
protected String[] doInBackground(URL... urls) {
URL searchReviewUrl = NetworkUtils.createReviewsUrl(mMovie.getMovieId());
URL searchVideoUrl = NetworkUtils.createVideosUrl(mMovie.getMovieId());
String jsonReviewString = "";
String jsonVideoString = "";
try {
jsonReviewString = NetworkUtils.makeHttpRequest(searchReviewUrl);
jsonVideoString = NetworkUtils.makeHttpRequest(searchVideoUrl);
} catch (IOException e) {
Log.e("Main Activity", "Problem making the HTTP request.", e);
}
return new String[]{jsonVideoString, jsonReviewString};
}
@Override
protected void onPostExecute(String[] jsonString) {
if (jsonString == null) {
fakeView.setVisibility(View.VISIBLE);
}
mTrailers = JsonUtils.extractTrailersFromJson(jsonString[0]);
mReviews = JsonUtils.extractReviewsFromJson(jsonString[1]);
populateReviewsAndTrailers(mReviews, mTrailers);
}
}
private void populateReviewsAndTrailers(List<Review> review, List<Trailer> trailers){
if (review.isEmpty()) {
reviewSwitch.setText(R.string.reviewLabelNone);
} else {
reviewSwitch.setText(R.string.reviewLabelExist);
fakeView.setVisibility(View.GONE);
mAdapter = new MovieReviewsRecyclerViewAdapter(MovieDetailActivity.this, mReviews);
mReviewList.addItemDecoration(new DividerItemDecoration(getApplicationContext(), DividerItemDecoration.VERTICAL));
mReviewList.setAdapter(mAdapter);
mReviewList.setVisibility(View.GONE);
}
if(trailers.isEmpty()){
trailersHeader.setText(R.string.trailersNA);
}else{
trailersHeader.setText(R.string.trailerHeader);
mTrailerAdapter = new MovieTrailersRecyclerViewAdapter(MovieDetailActivity.this, mTrailers);
mTrailersList.setAdapter(mTrailerAdapter);
}
}