2017-04-06 13 views
6

作成されたアクティビティのデフォルトアイテムを設定しようとしていますが、動作していませんか? これは私のコードです: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); 
} 

しかし、navigation.setSelectedItemId(R.id.dietplan);が動作していないようです。私は下のナビゲーションバーのデフォルトアイテムを設定するには助けてください:

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)  

答えて

3

で強調表示されている...このコードを試してみてください

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

私は私の答えを変えます、ありがとう –

9

の代わりにあなたはその項目をチェックする必要があり、選択:

これは私のスタックトレース(logcat)です。 、Javaでは

<?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> 

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

チェック項目はちょうど

XMLでの私の作業ソースコード共有下部のナビゲーションビュー

+0

navigation.getMenu()の前にこれをileします。findItem(R.id.dietplan).setChecked(true);しかし、NullPointerExceptionを与える – Abhijeet

+0

あなたはあなたのエラーを共有することができます –

+0

最初にbottom_navを次に見つけてメニューを見つけてください..その作業コード...私はこれを試しました –

0

これは私の作品

活動のレイアウト:

<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" /> 

色/ 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> 

クリックしてコールバック:私はTRいる

@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! 
} 
関連する問題