Как использовать beginTransaction.hide (). Show () вместо beginTransaction (). Replace () на фрагментах в студии android? - PullRequest
1 голос
/ 13 июля 2020
Прошла всего пара дней с тех пор, как я начал изучать студию android, и сегодня был день, когда я наткнулся на фрагменты. Я использую метод beginTransaction.replace () для замены фрагмента, но при этом каждый раз создается новый фрагмент. Я реализовал нижний вид навигации с фрагментами для каждого из соответствующих пунктов меню. Вот мой код:
package com.example.application;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import com.google.android.material.bottomnavigation.BottomNavigationView;

public class Application extends AppCompatActivity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_application);
        BottomNavigationView bottomNav = findViewById(R.id.bottomNavigationView);
        bottomNav.setOnNavigationItemSelectedListener(navListener);
}

private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;

            switch (item.getItemId()) {
                case R.id.firstPage:
                    selectedFragment = new firstFragment();
                    break;
                case R.id.secondPage:
                    selectedFragment = new secondFragment();
                    break;
                case R.id.thirdPage:
                    selectedFragment = new thirdFragment();
                    break;
                case R.id.fourthPage:
                    selectedFragment = new fourthFragment();
                    break;
                case R.id.fifthPage:
                    selectedFragment = new fifthFragment();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();

            return true;
        }
    };
}

Метод replace () плох, потому что мне нужно сохранять состояния для каждого фрагмента. Я не хочу использовать методы onSaveInstanceState для сохранения состояний, потому что с ними просто неприятно работать. Мне нужно заменить код:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment, selectedFragment).commit();

с заменой метода replace на hide and show. Мне нужно скрыть последний выбранный фрагмент и показать текущий выбранный фрагмент. Как этого добиться? А также я хотел бы знать, как большие приложения, такие как Facebook, Instagram, сохраняют свое состояние, даже если пользователи просматривают тысячи сообщений. Надеюсь, ты ответишь. С уважением.

...