0

現在のプロジェクトでは、カスタム アニメーションを使用して、正常に動作するアクティビティを切り替えています。

しかし、このアニメーションはすべてのアクティビティ スイッチで使用されるため、フラグメント ベースのPreferenceActivityは少し場違いに見えます。

私はすでに onBuildStartFragmentIntent の Transition をオーバーライドしようとしました (これは、新しいアクティビティが開始されることを示す唯一の指標のようです。

    @Override
    public Intent onBuildStartFragmentIntent (String fragmentName, Bundle args, int titleRes, int shortTitleRes) {
        this.overridePendingTransition(R.anim.slideinleft, R.anim.slideoutleft);
        return super.onBuildStartFragmentIntent(fragmentName, args, titleRes, shortTitleRes);
    }

しかし、これは機能していません。

編集: ブランデルのコメントの後、質問をもう一度読みました。より具体的にする必要があります。overridePendingTransition が機能していないのは、実際には PreferenceActivity 自体ではありません。別の Activiy から PreferenceActivity を開くと、Blundell のブログで説明されているような同様の方法で動作しています。

私が意味したのは、PreferenceActivity が小さな画面で使用される場合、ペインは 1 つしかないということです。その後、ヘッダーがクリックされると、新しいアクティビティが開かれます。ただし、この動作はすべて PreferenceActivity によって処理されます。ヘッダーがクリックされ、PreferenceActivity が新しいアクティビティを開く場合、この新しい画面をカスタム アニメーションで開きたいと思います。

4

2 に答える 2

1

ドキュメント [こちら]( https://developer.android.com/reference/android/preference/PreferenceActivity.html#onBuildStartFragmentIntent(java.lang.String , android.os.Bundle, int, int)) メソッド

Intent onBuildStartFragmentIntent (String fragmentName, 
            Bundle args, 
            int titleRes, 
            int shortTitleRes)

説明されています:

単一ペイン モードのときに startWithFragment(String, Bundle, Fragment, int, int, int) によって呼び出され、選択されたフラグメントを表示する新しいアクティビティを起動するインテントを構築します。デフォルトの実装は、フラグメントを表示するための適切な引数を使用して現在のアクティビティを再起動するインテントを構築します。

それで、その「奇妙な」動作を説明します。これを試すことができます。PreferenceActivity では、このようにメソッドをオーバーライドします。これにより、フラグメント スイッチごとにカスタム アニメーションがトリガーされます。

@Override
protected boolean isValidFragment(String fragmentName) {
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

    //return true value for valid fragments 

    return PreferenceFragment.class.getName().equals(fragmentName)
            || GeneralPreferenceFragment.class.getName().equals(fragmentName)
            || DataSyncPreferenceFragment.class.getName().equals(fragmentName)
            || NotificationPreferenceFragment.class.getName().equals(fragmentName);
}

もちろんバックアニメーションは別途設定。

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_in_left,R.anim.slide_out_right);
}

このコードは、Preference Activity テンプレートからのものです。それが役に立てば幸い :)

于 2017-07-19T14:11:40.193 に答える
0

これを試して?

onCreate(Bundle savedInstanceState);//Make the most sense

そうでなければ、これらを試してみませんか?

onRestoreInstanceState(Bundle state);
onNewIntent(Intent intent);

または、それらすべてをオーバーライドして、いくつかのログを記録します

Log.d("Debug", "onCreate called");
于 2012-06-06T12:09:35.103 に答える