Прошла всего пара дней с тех пор, как я начал изучать студию 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, сохраняют свое состояние, даже если пользователи просматривают тысячи сообщений. Надеюсь, ты ответишь. С уважением.