我的MainActivity.java中有一个包含3个片段的底部导航。 我想将我的一个片段设置为默认设置,以便在应用启动时自动打开。 我怎样才能做到这一点? 这是我的主Activity.java:
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private BottomNavigationView bottomNavigation;
private Fragment fragment;
private android.support.v4.app.FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomNavigation = (BottomNavigationView)findViewById(R.id.bottom_navigation);
bottomNavigation.inflateMenu(R.menu.bottom_menu);
fragmentManager = getSupportFragmentManager();
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
int id = item.getItemId();
switch (id){
case R.id.intros:
fragment = new IntrosFragment();
break;
case R.id.menus:
fragment = new MenusFragment();
break;
case R.id.infos:
fragment = new InfosFragment();
break;
}
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();
return true;
}
});
}
}
这是我的片段之一(它们都是一样的):
public class IntrosFragment extends Fragment {
public IntrosFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_intro, container, false);
// Inflate the layout for this fragment
TextView txt = (TextView) rootView.findViewById(R.id.introtv);
Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/naskh.ttf");
txt.setTypeface(font);
return rootView;
}
}
我该怎么办?
答案 0 :(得分:3)
您可以利用savedInstanceState
在您第一次创建活动时为空的事实,以便仅在首次启动时执行代码。您可以使用setSelectedItemId()
设置您想要选择的导航项目。
请注意,setSelectedItemId()
会触发您的OnNavigationItemSelectedListener
,因此您应在致电setOnNavigationItemSelectedListener()
后填写此代码。
if (savedInstanceState == null) {
bottomNavigation.setSelectedItemId(R.id.infos); // change to whichever id should be default
}
答案 1 :(得分:2)
如果您在一行中使用导航:
mobile_navigation.xml
<navigation
...
app:startDestination="@+id/navigation_home"
...
/>
答案 2 :(得分:1)
尝试一下:在容器活动的onCreate()中,放入
// Default Fragment
getSupportFragmentManager().beginTransaction()
.replace(R.id.frameContainer, new HomeFragment())
.commit();
答案 3 :(得分:0)
在BottomNavigationView
库中没有要呈现的默认片段的定义,通过以Ben指出的方式设置它,可以完全控制哪个片段可见。
我在不久前实现了这一点,我相信你正面临着背压问题,你可能想回到&#34;默认&#34;分段。在我的情况下,我实现了一个interface
,它被称为活动的onBackPressed
,一旦用户点击bask按下,只需调用以下方法来设置&#34;默认片段&#34;如选中
bottomNavigationView.setSelectedItem(R.id.myDefaultTabID);
答案 4 :(得分:0)
尝试一下:
FetchMode.SELECT
然后在private void setDefaultFragment() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, YOURFRAGMENT.newInstance());
transaction.commit();
}
之后致电setDefaultFragment()
。