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>
처음에는 내 활동 내에서 탐색 서랍을 만들었지 만 변경했습니다. 메인 액티비티에 다시 넣을 수는 있지만 원하는 것은 내 애플리케이션의 모든 다른 액티비티에 대해 동일한 탐색 서랍을 사용할 수 있지만 내 작업의 다른 뷰는 탐색 서랍이 아닙니다. –
내가 무슨 말을하는지는 주 활동에서 탐색 서랍을 만든 다음 그 조각에 대한 기본 탐색 서랍을 수행합니다. –
좋아, 해결책을 얻은 것 같아요, 정말 고마워요! –