我面临一个问题,我有一个名为"MainActivity“的活动,它有4个片段。问题是,如果我在片段2或3或4中,应用程序会转到后台,如下所示:
我不明白为何会出现这种行为。请给我建议可能的解决办法。
以下是主要的活动代码:
public class ContainerActivity extends AppCompatActivity
implements BottomNavigationView.OnNavigationItemSelectedListener{
private Fragment fragment;
private BottomNavigationView bottomNavigationView;
private RestaurantListFragment restaurantListFragment;
private String completeAddress, cityName, countryName, latitude, longitude, nickName, addressLabel, locationType, currentLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
if(getIntent().getExtras() != null){
latitude = getIntent().getExtras().getString("latitude");
longitude = getIntent().getExtras().getString("longitude");
completeAddress = getIntent().getExtras().getString("complete_address");
cityName = getIntent().getExtras().getString("city_name");
countryName = getIntent().getExtras().getString("country_name");
nickName = getIntent().getExtras().getString("nick_name");
addressLabel = getIntent().getExtras().getString("label");
locationType = getIntent().getExtras().getString("location_type");
currentLock = getIntent().getExtras().getString("current_lock");
Bundle bundle = new Bundle();
bundle.putString("latitude", latitude);
bundle.putString("longitude", longitude);
bundle.putString("complete_address", completeAddress);
bundle.putString("city_name", cityName);
bundle.putString("country_name", countryName);
bundle.putString("nick_name", nickName);
bundle.putString("label", addressLabel);
bundle.putString("location_type", locationType);
bundle.putString("current_lock", currentLock);
restaurantListFragment.setArguments(bundle);
}
}
@Override
protected void onResume() {
super.onResume();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, restaurantListFragment).addToBackStack(null).commit();
}
private void initView() {
bottomNavigationView = findViewById(R.id.btoom_navigation_view);
bottomNavigationView.setOnNavigationItemSelectedListener(this);
bottomNavigationView.setSelectedItemId(R.id.home);
restaurantListFragment = new RestaurantListFragment();
}
public void openRestaurantMenuFragment(Bundle bundle) {
RestaurantMenuFragment restaurantMenuFragment = new RestaurantMenuFragment();
restaurantMenuFragment.setArguments(bundle);
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, restaurantMenuFragment)
.addToBackStack(null)
.commit();
}
public void openFoodListOrDetailFrgment() {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new FoodDetailFragment())
.addToBackStack(null)
.commit();
}
public void openCart(){
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new MyOrderFragment())
.addToBackStack(null)
.commit();
}
public void openCompleteItemDetailFragment(){
bottomNavigationView.setVisibility(View.GONE);
}
public void showBottomNavigation(){
if(bottomNavigationView.getVisibility() == View.GONE){
bottomNavigationView.setVisibility(View.VISIBLE);
}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
switch (item.getItemId()) {
case R.id.home:
if ((getSupportFragmentManager().findFragmentById(R.id.fragment_container)) != null && !(fragment instanceof RestaurantListFragment)){
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new RestaurantListFragment()).addToBackStack(null).commit();
}
break;
case R.id.explore:
break;
case R.id.profile:
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, new ProfileFragment())
.addToBackStack(null)
.commit();
break;
}
return true;
}
@Override
public void onBackPressed() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if(fragment instanceof RestaurantListFragment){
getSupportFragmentManager().popBackStack(0, getSupportFragmentManager().POP_BACK_STACK_INCLUSIVE);
}
if(fragment instanceof CompleteFoodItemDetailFragment || fragment instanceof GoogleMapFragment){
if(bottomNavigationView.getVisibility() == View.GONE){
bottomNavigationView.setVisibility(View.VISIBLE);
}
}
super.onBackPressed();
}}
发布于 2020-08-28 08:01:40
在您的问题中,您是说当活动从后台恢复时,我假设默认片段将打开(restaurantListFragment)。这是因为
onResume()方法
@Override
protected void onResume() {
super.onResume();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container, restaurantListFragment).addToBackStack(null).commit();
}用替换它(片段只有在某个时候为空或分离时才会更改)
private fm;
initViews(){
fm = supportFragmentManager.beginTransaction();
}
@Override
protected void onResume() {
super.onResume();
if(fm.isEmpty() || restaurantListFragment.isDetached()){
fm.replace(R.id.fragment_container, restaurantListFragment).addToBackStack(null).commit();
}
}还替换了onCreate中的片段
@Override
protected void onCreate(Bundle savedInstanceState){
...
//below initViews();
...
fm.replace(R.id.fragment_container, restaurantListFragment).addToBackStack(null).commit();
}https://stackoverflow.com/questions/63629102
复制相似问题