3

내 모든 활동에서 사용할 수 있도록 내 응용 프로그램의 탐색 메뉴 조각을 만들었습니다. 그러나, 내가 앱을 실행할 때 햄버거 아이콘을 클릭 할 때나 왼쪽에서 오른쪽으로 당길 때 메뉴가 작동하지 않습니다. 그래서 디버거를 사용하기로 결정하고 조각의 레이아웃 구성 요소 중 아무 것도 조각의 클래스 내에서 초기화되지 않는다는 것을 알게되었습니다. 왜 이런 일이 일어나고 어떻게 해결할 수 있는지 알아낼 수 있습니까?탐색 메뉴 조각이 레이아웃의 구성 요소를 초기화 할 수 없습니다.

Fragment.java : 여기 내 fragment.java 클래스와 내 fragment_layout.xml 파일입니다

public class NavMenuFragment extends Fragment { 

// NavMenu member vars 
private DrawerLayout mDrawerLayout; 
private NavigationView navigationView; 
private ActionBarDrawerToggle mToggle; // Button for toggling the side menu 

// Keeps the position of the previously selected menu item(0 : Home) 
int position = 0; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_nav_menu,null); 
    mDrawerLayout = view.findViewById(R.id.drawerLayout); 
    navigationView = view.findViewById(R.id.nav_view); 
    mToggle = new ActionBarDrawerToggle(getActivity(),mDrawerLayout,R.string.drawer_open,R.string.drawer_closed); // Instantiating our button 
    return view; 
} 

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

    // Sets the default selected menu item, to the Home item 
    navigationView.getMenu().findItem(R.id.nav_home).setChecked(true); 

    // Used to help on check and uncheck menu items when the user clicks on them 
    final List<MenuItem> items = new ArrayList<>(); 
    Menu menu; 
    menu = navigationView.getMenu(); 

    // Fill the list with all the menu items 
    for(int i=0; i<menu.size();i++) { 
     items.add(menu.getItem(i)); 
    } 

    Toast.makeText(getActivity(), "size:" + items.size(), Toast.LENGTH_SHORT).show(); 

    // When an item inside the NavView gets clicked, then handle the event... 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 

     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

      switch (item.getItemId()) { 
       case R.id.nav_home: 
        mDrawerLayout.closeDrawer(Gravity.START); 
        break; 
       case R.id.nav_UserBoxGLB: 
        break; 
       case R.id.nav_UserBoxJP: 
        break; 
       case R.id.nav_settings: 
        break; 
       case R.id.nav_feedback: 
        break; 
       case R.id.nav_contact_us: 
        break; 
       case R.id.nav_donate: 
        // Open the website's URL in a browser window 
        Intent intent = new Intent(); 
        intent.setAction(Intent.ACTION_VIEW); 
        intent.addCategory(Intent.CATEGORY_BROWSABLE); 
        intent.setData(Uri.parse("http://www.google.com")); 
        startActivity(intent); 
        break; 
       case R.id.nav_about: 
        break; 
       default: 
        return onNavigationItemSelected(item); 
      } 
      items.get(position).setChecked(false); 
      item.setChecked(true); 
      mDrawerLayout.closeDrawers(); 
      return false; 
     } 
    }); 

    mDrawerLayout.addDrawerListener(mToggle); 
    // Set the hamburger icon's color 
    mToggle.getDrawerArrowDrawable().setColor(getResources().getColor(R.color.NavActionBarTextColor)); 
    mToggle.syncState(); 
} 

// When an item from the Action Bar gets tapped, then... 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    return mToggle.onOptionsItemSelected(item) || onOptionsItemSelected(item); 
} 
} 

Fragment_layout.xml :

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_gravity="left" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:id="@+id/drawerLayout"> 

    <!-- The actual side menu Nav View --> 
    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/navigation_header" 
     app:menu="@menu/navigation_menu" 
     android:id="@+id/nav_view"> 

    </android.support.design.widget.NavigationView> 

</android.support.v4.widget.DrawerLayout> 

답변

2

당신은 잘못
당신이 원하는 경우에 일을 모든 조각에 대해 동일한 탐색 서랍을 사용하려면
기본 활동에 탐색 서랍을 만들고 해당 탐색 서랍에서 조각을 열 수 있습니다.
여기에 tutorial

+0

처음에는 내 활동 내에서 탐색 서랍을 만들었지 만 변경했습니다. 메인 액티비티에 다시 넣을 수는 있지만 원하는 것은 내 애플리케이션의 모든 다른 액티비티에 대해 동일한 탐색 서랍을 사용할 수 있지만 내 작업의 다른 뷰는 탐색 서랍이 아닙니다. –

+0

내가 무슨 말을하는지는 주 활동에서 탐색 서랍을 만든 다음 그 조각에 대한 기본 탐색 서랍을 수행합니다. –

+0

좋아, 해결책을 얻은 것 같아요, 정말 고마워요! –