MainActivityには2つのフラグメントがあります。最初のフラグメントにはナビゲーションドロワがあり、2番目のフラグメントはナビゲーションドロワではありません。 MainActivityでは、onBackPressed()メソッドをオーバーライドして、ナビゲーションドロワーを開いたときにフラグメントを閉じる必要があります。しかし、私は、フラグメントのナビゲーションドロワの状態をアクティビティから取得する方法を知らない。ここでは、コードがあります:もちろんフラグメントのナビゲーション・ドロワーをアクティビティーから取得する
MainActivity.java
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
FragmentListProduct.java
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mainView = inflater.inflate(R.layout.fragment_list_product_layout, container, false);
Toolbar toolbar = (Toolbar) mainView.findViewById(R.id.toolbar);
fragmentActivity.setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout) mainView.findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(fragmentActivity, drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(drawerToggle);
drawerToggle.syncState();
navigationView = (NavigationView) mainView.findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setCheckedItem(R.id.nav_cat_all);
}
それは私にエラーCannot resolve symbol darwerlayout
を与えます。 前に私はdrawerLayout
を静的フィールドとして作ったが、私は警告Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)
を得た。それでは、どのようにこの問題を解決するために、または多分あなたは別の解決策を持っている:D
私はあなたがこのすべて間違っを持っていると思います。なぜ断片の中に引き出しを入れたいのですか?あなたの引き出しにフラグメントを持たせたい場合は、そのフラグメントを引き出しの中に入れてから、引き出しレイアウトロジックをMainActivityに移動する必要があります。しかし、あなたのケースでは、 'findFragmentById'を使ってフラグメントを見つけ出し、フラグメント内でパブリックメソッドを使ってこれを行うことができます。 –
@NaveenDissanayake私はこれが間違っているとは思わない。その要件に基づいています。彼が正しいことを提示する方法。私にとっては、新しい浮上カーブ –
「引き出しには断片がありますか?」「引き出しの中に断片があります。」 引き出しにはメニューが含まれています。断片化されていません。悪い英語にはごめんなさい – zihadrizkyef