0

Gmailアプリとまったく同じフラグメントを使用してツールバーナビゲーションを使用してアプリケーションを作成しようとしています。メールをクリックすると「ハンバーガー」ボタンとして表示される引き出しの切り替えがあります。ハンバーガーは戻るボタンに移行し、逆もまた同様である。引き出しフラグメントナビゲーションを使用したボタンの切り替え

現在のところ、ハンバーガーからバック矢印に「アニメーション化」されていないトグルボタンを除いて、私が望むものに非常に近いものを達成することができました。私が何をしたか

がmainActivityにBackStackのリスナーをバインドすることです:フラグメントAから次に

SupportFragmentManager.AddOnBackStackChangedListener(this); 

、私が戻るスタックに追加するフラグメントBをロードすることができます。

ResultFragment fragment = new ResultFragment(); 
this.Activity.SupportFragmentManager.BeginTransaction() 
    .Replace(Resource.Id.main_fragment, fragment) 
    .AddToBackStack("results") 
    .Commit(); 

bool canGoBack = SupportFragmentManager.BackStackEntryCount > 0; 
if (canGoBack) 
{ 
     //Showing Back Button 
     if (!_toolbarNavigationListererSet) 
     { 
     drawerToggle.DrawerIndicatorEnabled = false; 
     SupportActionBar.SetDisplayHomeAsUpEnabled(true); 

     BackHandler backHandler = new BackHandler(this); 
     drawerToggle.ToolbarNavigationClickListener = backHandler; 
     _toolbarNavigationListererSet = true; 
     } 

} 
else 
{ 
     //Show the hamburger 
     SupportActionBar.SetDisplayHomeAsUpEnabled(false); 
     drawerToggle.DrawerIndicatorEnabled = true; 

     drawerToggle.ToolbarNavigationClickListener = null; 
     _toolbarNavigationListererSet = false; 
} 
:空でない場合は、メインの活動ではBackstackためのリスナーチェックは、それが戻るボタンにハンバーガーを切り替えより

Activity.OnBackPressed(); 

何も:

drawerToggle.ToolbarNavigationClickListenerは次のように、戻るボタンを押してイベントを呼び出すために戻るボタンの動作を変更します。

これは、ハンバーガーが隠されていて、戻るボタンが表示されていることを理解しています。私はそれがアニメーションを見ることができない理由です。

私には何が欠けていますか?ご協力ありがとうございました。

P.S.コードはC#で書かれていますが、Xamarin.Androidを使用していますが、JavaコードやAndroidネイティブコードは提案としてよく受け入れられています。

答えて

0

あなたが戻ってボタンを押すと、あなたはこのように、アニメーションを追加することができます。

ValueAnimator anim = ValueAnimator.OfFloat(0f, 1.0f); 
anim.AddUpdateListener(new AnimatorUpdateListener(this)); 
anim.SetInterpolator(new DecelerateInterpolator()); 
anim.SetDuration(500); 
anim.Start(); 

public class AnimatorUpdateListener : Java.Lang.Object, ValueAnimator.IAnimatorUpdateListener 
{ 
    private MainActivity mContext; 

    public AnimatorUpdateListener(MainActivity context) 
    { 
     mContext = context; 
    } 

    public void OnAnimationUpdate(ValueAnimator valueAnimator) 
    { 
     var slideOffset = (System.Single)valueAnimator.AnimatedValue; 
     mContext.drawerToggle.OnDrawerSlide(mContext.drawerLayout, slideOffset); 
    } 
} 
+0

感謝を!これは、バックボタンからハンバーガーまで(OfFloat(0f、1.0f)からOfFloat(1.0f、0f)に変更しなければなりませんでしたが)、ハンバーガーからバックボタンまでは機能しません。より正確に言えば、 'drawerToggle.DrawerIndicatorEnabled = false;を設定する前に私が' Taskt.Delay(500) 'を実行していない場合にのみ動作します。 –

関連する問題