我为我的应用程序创建了一个底部导航,想知道如何做到这一点,以便当用户打开该应用程序时,它返回到他们正在查看的最后一个片段?此刻,即使您仅切换应用程序一秒钟,它也会立即返回到主页。提前致谢!
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MenuItem;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class MainActivity extends AppCompatActivity {
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomnav = findViewById(R.id.bottom_menu);
bottomnav.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, new HomeFragment()).commit();
mediaPlayer = MediaPlayer.create(this, R.raw.clickandboop);
}
private final BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
Fragment selectedFragment = null;
switch (menuItem.getItemId()) {
case R.id.nav_home:
selectedFragment = new HomeFragment();
mediaPlayer.start();
break;
case R.id.nav_favourites:
selectedFragment = new FavFragment();
mediaPlayer.start();
break;
case R.id.nav_trophies:
selectedFragment = new TrophiesFragment();
mediaPlayer.start();
break;
case R.id.nav_info:
selectedFragment = new InfoFragment();
mediaPlayer.start();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_layout, selectedFragment).commit();
return true;
}
};
片段已经使您恢复到原来的状态。
这意味着您需要用来包装replace()
呼叫,savedInstanceState == null
以免破坏刚刚重新创建的Fragment:
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_layout, new HomeFragment())
.commit();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句