【问题标题】:Fragment Layout List <--> Details片段布局列表 <--> 详细信息
【发布时间】:2012-04-21 16:56:47
【问题描述】:

我想实现一个具有以下设计的布局:

风景: 左边是物品清单,右边是细节

纵向: 物品列表,点击后才详细

为了完成这项工作,我遵循了这些教程: Tutorial 1 Tutorial 2

它按预期工作。

但不是在纵向并单击 Listitem 时开始一个新活动, 我希望片段被细节替换,这样我就可以为过渡设置动画。

所以我玩弄了一些意见,但遇到了问题。之后我阅读了以下文章,并修改了我的布局以使用占位符并以编程方式添加片段: Article

单击列表项时触发的操作只是将其容器中的列表片段替换为详细信息片段。

但是现在如果我恢复到横向,布局的列表部分会显示细节而不是列表,因为我替换了内容。

有没有办法解决这个问题?

目前,我设法通过在横向和纵向两种布局中使用两个片段占位符以及包装内容以及隐藏和显示片段来实现这一点,但我不知道这是否是正确的方法?也许 ViewFlipper 会更好?

这里的动画也不能正常工作,因为我在同一个事务中隐藏和显示。

此外,如果我处于横向模式并单击列表项并显示数据,然后返回纵向,我希望显示数据视图,而不是列表,但仅当数据已显示时。

Atm 我使用传递给意图数据的标志来管理它,并再次显示/隐藏正确的视图。

还有其他的想法吗?

非常感谢,已经尝试了好几个小时了!

编辑 我遇到的主要问题是,我设置的滑入/滑出动画播放不正确,因为我在一个事务中隐藏和显示片段。它只是隐藏一个片段并在另一个片段中滑动,因此第一个片段不会滑出:/

要明白我的意思,这是我在片段测试应用程序中实现它的方式:

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>

ListItemClick 上的 ListFragment:

@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();

            }
        }
    }

【问题讨论】:

    标签: android fragment viewflipper portrait


    【解决方案1】:

    当您最初放置列表片段时,您需要将其放入后退堆栈,然后覆盖细节片段中的后退按钮,以便在按下时将列表视图从后退堆栈弹出。

    【讨论】:

    • 谢谢,但这不是我遇到的问题,已经做了后台操作。将通过编辑详细解释主帖子中的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多