2016-05-19 16 views
14

私はカスタムツールバーを使用しています。私はそれに戻るボタンを追加する必要があります。今私は、このコードを使用して戻るボタンを追加しています。アンドロイドの実装方法ツールバー戻るボタン

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
     toolbar.setBackgroundColor(getResources().getColor(R.color.white)); 
     toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onBackPressed(); 
      } 
     }); 

これは問題なく動作します。私はバックボタンが追加されているのを見ることができます。しかし、私が逆ボタンを持たない断片1にいる場合を考えてみましょう。今度はFragment2に移り、Back Buttonに追加します。フラグメント2からフラグメント3を開き、もう一度バックボタンを追加します。

フラグメント3から戻るボタンを押してフラグメント2に戻るとき、フラグメント2でフラグメントが必要かどうかを確認するために、フラグメントスタックをチェックする必要があります。

フラグメントをスタックするために自動的に戻るボタンを処理する方法はありますか?

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     else if(id == android.R.id.home){ 
      Intent i= new Intent(this, MainActivity.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(i); 
      finish(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
+0

をツールバーに機能を押され、あなたが正確に何をしたい私はより明確にすることはできますか? – Masum

+0

更新された私の質問 – Zach

答えて

0

非常に簡単に後ろのアイコンを処理できます。このようdisableDrawerことで

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mainActivity = (MainActivity) getActivity(); 

     getFragmentManager().addOnBackStackChangedListener(this); 

     shouldDisplayHomeUp(); 
    } 

    @Override 
    public void onBackStackChanged() { 
     shouldDisplayHomeUp(); 
    } 


    public boolean shouldDisplayHomeUp() { 
     //Enable Up button only if there are entries in the back stack 
     boolean canBack = false; 
     try { 
      canBack = getFragmentManager().getBackStackEntryCount() > 0; 
     } catch (Exception ex) { 
//   Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage 
     } 

     if (canBack) { 
      mainActivity.drawerDisable(); 
     } else { 
      mainActivity.drawerEnable(); 
     } 
     return canBack; 
    } 

:その内の以下の方法を置く

最初のクレートFragmentManager .OnBackStackChangedListenerを実装する抽象BaseFragmentクラス:あなたのフラグメントの全てが単一のアクティビティにある場合、私は本当に、次の方法でこれを処理することをお勧めします& enableDrawer関数はあなたのアイコンを処理し、OnBackPressedメソッドは必要に応じてバックアイコン表示を押すとあなたのアクティビティであなたのBackStack Nowを処理します。あなたのonBackPressedは次のようなものでなければなりません:

int backStackCount = getSupportFragmentManager().getBackStackEntryCount(); 

      if (backStackCount == 0) { 
       //nothing exist in backStack OS handle it 
       super.onBackPressed(); 
      } else { 

       getSupportFragmentManager().popBackStack(); 
} 

完全実施hereを参照してください。

+0

あなたの答えをありがとう。フラグメントがスタックから削除されたときにonBackStackChangedが何度も呼び出された理由を知っていますか? – Zach

+0

私はそれが**バックストック**プッシュ/ポップのためだと思うが、私はよく分からない。 – Amir

7

これは、あなたが以下のように続いてonOptionsItemSelectedにあなたはホームボタンを無効にすることができAppCompatActivity

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object 
     setSupportActionBar(toolbar); 

     // enabling action bar app icon and behaving it as toggle button 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
    } 

を使用していることを前提とします。このようなもの

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 
toolbar.setBackgroundColor(getResources().getColor(R.color.white)); 
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow)); 

setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     onBackPressed(); 
    } 
}); 
10

ただ、コードの二つの新しい行を追加します。

0

クラスで使用する方法あなたの活動

private void setupToolbar(){ 
    Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     ActionBar actionBar=getSupportActionBar(); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
     actionBar.setDisplayShowHomeEnabled(true); 
     toolbar.setNavigationOnClickListener(new View.OnClickListener() { 
    @Override 
      public void onClick(View v) { 
      finish(); 
      } 
       }); 
       } 
+0

答えはコードだけに過ぎませんが、あなたのやったことを少し説明する方が良いでしょう。これは将来もあなたの答えに価値をもたらします – DaFois

0

にそれは背中の作品だが

private setUpToolBar() { 

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

setSupportActionBar(toolbar); 

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

getSupportActionBar().setDisplayShowHomeEnabled(true); 

toolbar.setNavigationOnClickListener(new View.OnClickListener() { 

@Override 

public void onClick(View v) { 

onBackPressed(); 

} 

}); 

} 
+0

コードを正しく編集して説明を加えてください。 – Billa

関連する問題