2

所以我今天遇到了一個小問題。我在我的應用程序中創建了一個底部導航視圖,點擊按鈕後,它將替換屏幕上的片段(並且它完美地工作!)。 但啓動應用程序後,並沒有點擊任何按鈕,屏幕上沒有片段。 我意識到只有在點擊按鈕後纔會顯示片段,並且我想要一個默認片段(kalkulatorFragment)。 我已經盡我所能以某種方式設置它,但沒有成功......如何設置主要活動中顯示的默認片段?

public class Main extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
} 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    kalkulatorFragment kalkulator_fragment = new kalkulatorFragment(); 
    wzoryFragment wzory_fragment = new wzoryFragment(); 
    definicjeFragment definicje_fragment = new definicjeFragment(); 

     switch (item.getItemId()) { 
      case R.id.kalkulator: 
       ft.replace(android.R.id.content, kalkulator_fragment); 
       ft.commit(); 
       return true; 

      case R.id.wzory: 
       ft.replace(android.R.id.content, wzory_fragment); 
       ft.commit(); 
       return true; 

      case R.id.definicje: 
       ft.replace(android.R.id.content, definicje_fragment); 
       ft.commit(); 
       return true; 
     } 
     return false; 
    } 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:design="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/linear" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:id="@+id/definicjeFragment" 
     android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.definicjeFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     tools:layout="@layout/definicje_view" /> 

    <fragment 
     android:id="@+id/wzoryFragment" 
     android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.wzoryFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     tools:layout="@layout/wzory_view" /> 

    <fragment 
     android:id="@+id/kalkulatorFragment" 
     android:name="com.thegodofcoding.adamgreloch.ultracalcalpha.kalkulatorFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     tools:layout="@layout/kalkulator_view" /> 
</FrameLayout> 


<android.support.design.widget.BottomNavigationView 
    android:id="@+id/navigation" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom" 
    android:background="@color/bottomNavBar" 
    android:layout_alignParentBottom="true" 
    design:menu="@menu/bottom_nav_items" /> 

謝謝:)

回答

2

好吧,我只是理解了它。 我將ft.replace移動到了onCreate()方法,因此kalkulatorFragment將在創建Activity後立即顯示。

public class Main extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    kalkulatorFragment kalkulator_fragment = new kalkulatorFragment(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    ft.replace(android.R.id.content, kalkulator_fragment); 
    ft.commit(); 

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
} 
-1

您需要使用此代碼onCreate方法之外

navigation.setSelectedItemId(R.id.IdOFYourItemFromBottomNavigationMenuItems);

我不知道爲什麼,但它不會在OnCreate方法中工作。你可以在OnCreate方法中聲明和初始化它,只是不能在那裏設置默認項目。

在我的情況下,我在OnCreateOptionsMenu中使用它。