0

我正在编写一个看起来像 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>

SubscriptionsListFragment 在加载时会用另一个片段填充框架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。

4

2 回答 2

1

我发现了一些有用的东西:

  • 我用 XML 制作了第三个片段<fragment>
  • 当应用程序启动时,我添加了一个隐藏它的事务
  • 当我单击一个项目时,我会显示它并将其替换为我想要显示的内容

结果有点慢,但我认为这是因为它在显示转换时在内容中初始化了一个 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 回答