我正在编写一个看起来像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_middle_content
framelayout。
当我在第二个片段中执行某些操作时,我想:
fragment_left_list
fragment_middle_content
放在左侧fragment_right_content
。但是,我不知道该怎么做。与上面的XML布局一样,您可以看到隐藏了第3帧布局(visibility == gone)。因此,当我在第二个片段中执行某些操作时,我有:
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。
答案 0 :(得分:1)
我找到了有用的东西:
<fragment>
。结果有点迟钝,但我认为这是因为它在显示转换时初始化内容中的webview。我会找到一种方法让这个顺利。
答案 1 :(得分:0)
我是通过覆盖主要活动的后退按钮来完成的。我在主布局xml文件中使用了2个FrameLayouts后面的1个片段。
@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);
}