2017-04-06 16 views
6

Próbuję ustawić element domyślny dla działania, ale nie działa? To jest mój kod:Jak ustawić wybraną pozycję w BottomNavigationView

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_userhome); 
    mTextMessage = (TextView) findViewById(R.id.message); 
    profile = (FrameLayout) findViewById(R.id.profile); 
    mall = (FrameLayout) findViewById(R.id.mall); 
    dietplan =(FrameLayout) findViewById(R.id.dietplan); 
    BottomNavigationView navigation = (BottomNavigationView) 
    findViewById(R.id.navigation); 
    navigation.setSelectedItemId(R.id.dietplan); 
    navigation.setOnNavigationItemSelectedListener 
    (mOnNavigationItemSelectedListener); 
} 

Ale wydaje się, że navigation.setSelectedItemId(R.id.dietplan); nie działa. Proszę mi pomóc, aby ustawić domyślną pozycję z dolnym pasku nawigacyjnym:

To jest mój ślad stosu (logcat):

FATAL EXCEPTION: main 
    Process: gym.android.ommsoftware.gym, PID: 1915 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{gym.android.ommsoftware.gym/gym.android.ommsoftware.gym.Userhome}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464) 
     at android.app.ActivityThread.access$900(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:146) 
     at android.app.ActivityThread.main(ActivityThread.java:5653) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 
     at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
     at gym.android.ommsoftware.gym.Userhome.onCreate(Userhome.java:57) 
     at android.app.Activity.performCreate(Activity.java:5541) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2368) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2464)  
     at android.app.ActivityThread.access$900(ActivityThread.java:172)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:146)  
     at android.app.ActivityThread.main(ActivityThread.java:5653)  
     at java.lang.reflect.Method.invokeNative(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:515)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)  
     at dalvik.system.NativeStart.main(Native Method)  

Odpowiedz

3

Wystarczy udostępnić mój kod źródłowy roboczego

w XML,

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.design.widget.BottomNavigationView 
     android:background="@color/colorWhite" 
     android:id="@+id/gfPrlBnvBtmView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="start" 
     android:layout_alignParentBottom="true" 
     app:menu="@menu/bottom_navigation_main" /> 
</LinearLayout> 

W Javie

public class TestActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener 
{ 
    private BottomNavigationView mBtmView; 
    private int mMenuId; 
    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { 
     super.onCreate(savedInstanceState, persistentState); 
     setContentView(R.layout.test); 
     mBtmView = (BottomNavigationView) findViewById(R.id.gfPrlBnvBtmView); 
     mBtmView.setOnNavigationItemSelectedListener(this); 
     mBtmView.getMenu().findItem(R.id.action_yoga).setChecked(true); 
    } 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     // uncheck the other items. 
     mMenuId = item.getItemId(); 
     for (int i = 0; i < mBtmView.getMenu().size(); i++) { 
      MenuItem menuItem = mBtmView.getMenu().getItem(i); 
      boolean isChecked = menuItem.getItemId() == item.getItemId(); 
      menuItem.setChecked(isChecked); 
     } 

     switch (item.getItemId()) { 
      case R.id.action_food: { 
      } 
      break; 
      case R.id.action_medical: { 
      } 
      break; 
      case R.id.action_yoga: { 
      } 
      break; 
      case R.id.action_postures: { 
      } 
      break; 
     } 
     return false; 
    } 
} 
+0

, jeśli ktoś w dół głosowania pls wyjaśnić, dlaczego następnie tylko zmieniam odpowiedź, dzięki –

9

Zamiast wybrany trzeba sprawdzić ten element. Spróbuj tego kodu ...

mBottomNavigationView=(BottomNavigationView)findViewById(R.id.bottom_nav); 
mBottomNavigationView.getMenu().findItem(R.id.dietplan).setChecked(true); 

sprawdzone element jest zaznaczony na bottom navigation View

+0

mam tr ied this before navigation.getMenu(). findItem (R.id.dietplan) .setChecked (true); ale daje to NullPointerException – Abhijeet

+0

możesz podzielić swój błąd –

+0

najpierw zainicjować bottom_nav następnie znaleźć menu .. jego działający kod ... Próbowałem to –

0

Działa to dla mnie

układ aktywny:

<android.support.design.widget.BottomNavigationView 
     android:id="@+id/bottomNavigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:itemBackground="@color/colorPrimary" 
     app:itemIconTint="@color/tabs" 
     app:itemTextColor="@color/tabs" 
     app:menu="@menu/bottom_navigation_main" /> 

kolor/tabs.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:color="@color/not_active" android:state_checked="false"/> 
    <item android:color="@color/active" android:state_checked="true"/> 

</selector> 

Kliknij zwrotna:

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_tab0: 
      setFragment(f0); 
      break; 
     case R.id.action_tab1: 
      setFragment(f1); 
      break; 
    } 
    return true; // not false! 
} 
Powiązane problemy