0

次のデザインのレイアウトを実装したいと考えています。

横: 左側にアイテムのリスト、右側に詳細

縦: アイテムのリスト、クリック後の詳細のみ

これを機能させるために、次のチュートリアルに従いました: チュートリアル 1 チュートリアル 2

期待どおりに機能しました。

しかし、ポートレートで Listitem をクリックしたときに新しいアクティビティを開始する代わりに、トランジションをアニメーション化できるように、フラグメントを詳細に置き換えたいと考えています。

だから私は遊んでいて、ビューに問題がありました。その後、次の記事を読み、プレースホルダーを使用してプログラムでフラグメントを追加するようにレイアウトを変更しました

listitem がクリックされたときにトリガーされるアクションは、コンテナー内のリスト フラグメントを詳細フラグメントに置き換えるだけです。

しかし、横向きに戻すと、コンテンツを置き換えたため、レイアウトのリスト部分にリストではなく詳細が表示されます。

この問題を解決する方法はありますか?

現時点では、横向きと縦向きの両方のレイアウトで 2 つのフラグメント プレースホルダーを使用し、ラップ コンテンツを使用し、フラグメントを非表示および表示することで、これを機能させることができましたが、これが正しいアプローチであるかどうかはわかりません。おそらくViewFlipperの方が良いでしょうか?

また、ここのアニメーションは正しく動作しません。これは、同じトランザクションで非表示と表示を行うためです。

また、横向きモードでリストアイテムをクリックしてデータが表示され、縦向きに戻ると、リストではなくデータビューが表示されますが、データが既に表示されている場合にのみ表示されます。

Atm インテントデータにフラグを渡してこれを管理し、正しいビューを再度表示/非表示にしました。

代替案はありますか?

どうもありがとうございました。何時間も試してみました。

編集 私が持っている主な問題は、1 つのトランザクションでフラグメントを表示および非表示にするため、設定したスライド イン/アウト アニメーションが正しく再生されないことです。一方のフラグメントを非表示にして他方のフラグメントにスライドさせるだけなので、最初のフラグメントはスライドアウトされません:/

私が何を意味するかを理解するために、フラグメント テスト アプリでそれをどのように実装したかを次に示します。

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <FrameLayout
        android:id="@+id/details_Fragment_Placeholder"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent" >
    </FrameLayout>

    <FrameLayout
        android:id="@+id/main_Fragment_Placeholder"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </FrameLayout>

</LinearLayout>

ListFragment onListItemClick:

@Override
    public void onListItemClick(ListView l, View v, int position, long id) {
FragmentManager fragmentManager = getFragmentManager();
        Screen2Fragment fragment2 = (Screen2Fragment) fragmentManager
                .findFragmentByTag(Screen2Fragment.TAG);

        if (fragment != null) {

            if ((getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)) {

                        .beginTransaction();

                transaction.setCustomAnimations(R.anim.slide_in_right,
                        R.anim.slide_out_left, android.R.anim.slide_in_left,
                        android.R.anim.slide_out_right);

                Screen1ListFragment fragment1 = (Screen1ListFragment) fragmentManager
                        .findFragmentByTag(Screen1ListFragment.TAG);
                transaction.hide(fragment1);
                transaction.show(fragment2);

                transaction.addToBackStack("ReturnToScreen1");

                transaction.commit();

            }
        }
    }
4

1 に答える 1

0

リストフラグメントを最初に配置するときは、それをバックスタックに配置する必要があります。次に、詳細フラグメントの戻るボタンをオーバーライドして、押されたときにリストビューをバックスタックからポップします。

于 2012-04-21T20:21:06.503 に答える