我正在编写一个看起来像 gmail 的应用程序。事实上,我想在屏幕上激活 2 个窗格,就像在 Honeycomb gmail 应用程序中一样。
我的主要布局是:
<?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>
SubscriptionsList
Fragment 在加载时会用另一个片段填充框架fragment_middle_content
布局。
当我在第二个片段中做某事时,我想:
- 隐藏
fragment_left_list
- 放在
fragment_middle_content
左边 - 显示
fragment_right_content
第三个片段。
但是,我不知道该怎么做。与上面的 XML 布局一样,您可以看到第 3 帧布局是隐藏的(可见性 == 消失了)。所以当我在第二个片段中做某事时,我有:
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.0 编程 API。