2017-10-03 4 views
0

私のAndroid Studioプロジェクトでは、MainActivityにNavigationDrawerにフラグメントを実装し、すべてのフラグメントに下部ナビゲーションビューを実装したいと考えています。ボトムナビゲーションを実装する

これは、一つの断片のコードです:私はこのエラーを取得する

public class U16 extends Fragment{ 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    getActivity().setTitle("TITOLO U16"); 
} 

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

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     switch (item.getItemId()) { 
      case R.id.navigation_home: 
       fragmentTransaction.replace(R.id.content, new Calendario()).commit(); 
       return true; 
      case R.id.navigation_dashboard: 
       fragmentTransaction.replace(R.id.content, new Palestre()).commit(); 
       return true; 
      case R.id.navigation_notifications: 
       fragmentTransaction.replace(R.id.content, new Squadra()).commit(); 
       return true; 
     } 
     return false; 
    } 

}; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

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

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.content, new Calendario()).commit(); 

    return inflater.inflate(R.layout.u16_layout, container, false); 
} 

}

FATAL EXCEPTION: main 
Process: app.navigationdrawerfragment, PID: 21499 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference at app.navigationdrawerfragment.U16.onCreateView(U16.java:52) 

私はプロシージャにこのエラーは、 "OnCreateView"「やっていることを知っていますnavigation.setOnNavigationItemSelectedListener ... "

これはu16_layout.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" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="simone.biliato.navigationdrawerfragment.MainActivity"> 

    <FrameLayout 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"> 
    </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="?android:attr/windowBackground" 
     app:menu="@menu/navigation" /> 

</LinearLayout> 

誰でも同じことを試みましたか?

+0

はあなたがここにこの 'Fragment'に関連した' Activity'のレイアウトを投稿することができますか? –

+0

こんにちはフォンデサ。私はレイアウトで最初の質問を編集 – Simone

+0

誰かが私を助けることができますか?お願いします :( – Simone

答えて

1

まだ作成されていない人物を設定しようとしています。 したがって、このように、イベントonViewCreatedにコードを移動:

 @Override 
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 
      getActivity().setTitle("Titolo"); 

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

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(R.id.content, new Calendario()).commit(); 

    return inflater.inflate(R.layout.u16_layout, container, false); 
     } 

これは動作します:)

関連する問題