0

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

横向:左侧为项目列表,右侧为详细信息

纵向:项目列表,点击后只有详细信息

为了使它工作,我遵循了这些教程: 教程 1 教程 2

它按预期工作。

但是,我不想在纵向并单击 Listitem 时启动新活动,而是希望片段被细节替换,以便我可以为过渡设置动画。

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

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

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

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

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

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

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

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

有什么替代的想法吗?

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

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

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

主.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>

ListFragment onListItemClick:

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

            }
        }
    }
4

1 回答 1

0

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

于 2012-04-21T20:21:06.503 回答