0

gmailのようなアプリを書いています。実際、Honeycomb gmail アプリとまったく同じように、画面上で 2 つのペインをアクティブにしたいと考えています。

私の主なレイアウトは次のとおりです。

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

    <fragment android:name="org.bicou.newsreader.SubscriptionsList"
        android:id="@+id/fragment_left_list"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent" />

    <FrameLayout android:id="@+id/fragment_middle_content" android:layout_weight="3"
        android:layout_width="0px" android:layout_height="match_parent"
        android:background="?android:attr/detailsElementBackground" />

    <FrameLayout android:id="@+id/fragment_right_content" android:layout_weight="8"
        android:visibility="gone"
        android:layout_width="0px" android:layout_height="match_parent"
        android:background="?android:attr/detailsElementBackground" />

</LinearLayout>

SubscriptionsListFragment は、読み込み時に、フレームfragment_middle_contentレイアウトに別のフラグメントを設定します。

2番目のフラグメントで何かをするとき、私はしたい:

  • 隠れるfragment_left_list
  • fragment_middle_content左に置く
  • fragment_right_content3番目のフラグメントで表示します。

しかし、私はこれを行う方法がわかりません。上記の XML レイアウトと同様に、3 番目のフレーム レイアウトが非表示になっている (可視性 == なくなっている) ことがわかります。したがって、2番目のフラグメントで何かを行うと、次のようになります:

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();

        // Hide the left pane
        SubscriptionsList sl = (SubscriptionsList) fm.findFragmentById(R.id.fragment_left_list);
        ft.hide(sl);

        // Show the right pane
        OneItem oi = OneItem.newInstance(mEntries.get(position));
        ft.replace(R.id.fragment_right_content, oi);
        ft.show(oi);
        getActivity().findViewById(R.id.fragment_right_content).setVisibility(View.VISIBLE);

        ft.addToBackStack(null);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();

これは一度機能します。プッシュ バックすると、バック スタックはフラグメント トランザクションを復元しますが、3 番目のフラグメントを隠しません。

適切なアプローチがないことはわかっていますが、3.0 プログラミング API にはまだ慣れていません。

4

2 に答える 2

1

私はうまくいくものを見つけました:

  • 3 番目のフラグメントを実際<fragment>に XML で作成しました。
  • アプリの起動時に、それを非表示にするトランザクションを追加します
  • アイテムをクリックすると、それが表示され、表示したいコンテンツに置き換えられます

結果がちょっと遅いのですが、トランジション表示中にコンテンツ内のwebviewを初期化しているためだと思います。これをスムーズにする方法を見つけます。

于 2011-04-26T10:43:39.900 に答える
0

メインアクティビティの戻るボタンをオーバーライドしてそれを行いました。メイン レイアウト xml ファイルで 1 つのフラグメントに続いて 2 つの FrameLayouts を使用しています。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        View partlarFrame = findViewById(R.id.partview_fragment);
        if(partlarFrame != null && partlarFrame.getVisibility() == View.VISIBLE)
        {
            partlarFrame.setVisibility(View.GONE);
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
            ft.show(getSupportFragmentManager().findFragmentById(R.id.tutlist_fragment));
            ft.remove(getSupportFragmentManager().findFragmentById(R.id.partview_fragment));
        ft.commit();
        return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}
于 2012-02-15T14:35:53.187 に答える