2017-03-07 13 views
1

フラグメントで構築されたアプリケーションをデバッグしようとしています。私は断片についてはほとんど知らないので、私はいくつかの問題があります。DrawerLayoutをフラグメントで処理する

  1. MainActivityや他のフラグメントからフラグメントを開くと、アクションボタンが戻るボタンに変換されます。 私はちょっと仕事をしましたが、断片から戻ってもう一度押すと、戻るボタンがホームボタンに戻ります。

  2. Androidの戻るボタンのように、そのホームボタンを背面の矢印に変換するときに、そのホームボタンをどのように動作させることができるかを知りたいと思います。現在は何もしません。

    MainActivity

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.action_trash_all: 
          DataHolder.cart = null; 
          isTrashButtonPresent = false; 
          supportInvalidateOptionsMenu(); 
          inflateFragment(CartFragment.newInstance(null, null)); 
          resolveCircularText(DataHolder.getOverallCartQuantity()); 
          return true; 
         case R.id.btnMyMenu: 
          if (drawer.getDrawerLockMode(GravityCompat.START) 
            ==DrawerLayout.LOCK_MODE_LOCKED_CLOSED) { 
           onBackPressed(); 
          } else { 
           drawerToggle(); 
          } 
          return true; 
         default: 
          return super.onOptionsItemSelected(item); 
        } 
    } 
    
    private void drawerToggle() { 
        if (drawer.isDrawerVisible(GravityCompat.START)) { 
         drawer.closeDrawer(GravityCompat.START); 
        } else { 
         drawer.openDrawer(GravityCompat.START); 
        } 
    } 
    
    private void setupNavigationDrawer() { 
        mDrawerToggle = new ActionBarDrawerToggle(
          this, drawer, toolbar, 
          R.string.navigation_drawer_open,R.string.navigation_drawer_close); 
        mDrawerToggle.setHomeAsUpIndicator(R.drawable.drawer_icon); 
        drawer.addDrawerListener(mDrawerToggle); 
        navigationView.setNavigationItemSelectedListener(this); 
        if (getSupportActionBar() != null) { 
         getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
         getSupportActionBar().setHomeButtonEnabled(true); 
        } 
        setDrawerState(true); 
    } 
    
    public void setDrawerState(boolean isEnabled) { 
        if (isEnabled) { 
         drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, 
         GravityCompat.START); 
         mDrawerToggle.syncState(); 
        } else { 
         drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, 
         GravityCompat.START); 
         //Drawable backButton = ContextCompat.getDrawable(this, 
          R.mipmap.ic_back_button); 
         getSupportActionBar().setHomeAsUpIndicator(null); 
        } 
    } 
    

    かけら:

    のOnCreate:

    if (getActivity() != null) { 
         ((MainActivity) getActivity()).setDrawerState(false); 
        } 
    
    @Override 
    public void onDestroy() { 
        super.onDestroy(); 
        if (getActivity() != null) { 
         ((MainActivity) getActivity()).setDrawerState(true); 
        } 
    } 
    
    をここで

が、私はそれが関連することだと思ういくつかのコードであるあなたが必要な場合は、私はより多くを提供します

ありがとうございましたdvance!

+0

私はあなたが欲しいものを理解していません。あなたは、ユーザーが何をしているのか、それぞれのステップでアプリケーションがどのように対応すべきかを段階的に記述できますか?スクリーンショットやモックアップが大いに役立ちます。 –

+0

これはeコマースアプリです。 MainActivityには、いくつかのフラグメント(My account、wishlistなど)につながるボタンがあるDrawerLayoutが含まれています。ユーザーがフラグメントを開くと、DrawerLayoutは非アクティブになり、DrawerLayoutアクションボタンの代わりに戻るボタンが表示されます。これは、戻るボタンが何もしない場合や、例えばユーザが電話のデフォルトの戻るボタンから戻ると、そのボタンが別のフラグメントに裏打ちされている場合には、戻るボタンが消えてしまいます。いくつかのスクリーンショットで質問を更新します。 –

+0

質問を編集する必要があります –

答えて

0

Interfaceクラスを使用してみてください:今すぐ

public interface DrawerViewInterface { 
    void lockDrawer(); 
    void unlockDrawer(); 
    void showBackIcon(); 
    void showHamburgerIcon(); 
} 

、あなたのMainActivityにこのInterfaceクラスを実装します。

((DrawerViewInterface) getActivity()).showHamburgerIcon(); 

public class MainActivity extends AppCompactActivity implements DrawerViewInterface { 

    @Override 
    public void lockDrawer() { 
     drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
    } 

    @Override 
    public void unlockDrawer() { 
     drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); 
    } 

    @Override 
    public void showBackIcon() { 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public void showHamburgerIcon() { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 
     mActionBarDrawerToggle.setDrawerIndicatorEnabled(true); 
    } 

} 

を今、あなたのFragmentで、であなたが好きな呼び出し

または

((DrawerViewInter) getActivity()).showBackIcon(); 
+0

ありがとう、それはボタンの問題を世話しました。しかし今、私は、ボタンをハンバーガーかバック矢印状態で動作させるように見えることはできません。 –

関連する問題