Попытка сохранить состояние переключателя и сделать его видимым в зависимости от него. - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть переключатель, который при нажатии на него заполняет 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 () остаются скрытыми.

enter image description here

РЕДАКТИРОВАТЬ: добавлено полное наСоздать & изображение

Отзывы ручка

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);
    }
}

1 Ответ

0 голосов
/ 27 ноября 2018

Полагаю, вы забыли показать обзоры после поворота экрана.

Попробуйте:

if(savedInstanceState !=null && savedInstanceState.containsKey(REVIEW_BUTTON)){
    isReviewButtonClicked = savedInstanceState.getBoolean(REVIEW_BUTTON, false);
    if (isReviewButtonClicked) showReviews();
}
...