Android FragmentManager屏幕上有多个片段?

Android FragmentManager屏幕上有多个片段?,android,user-interface,fragment,tablet,Android,User Interface,Fragment,Tablet,在安卓3.0及以上版本上,安卓团队极力要求您在活动中使用片段。我认为这很有用,但我希望能够在我的应用程序中处理点击事件。我在应用程序的右侧使用了一个列表片段,因此在托管该片段的活动中会执行onclick(或任意单击侦听器)。因此,我不得不从将项目放在XML中转向使用片段管理器 在设计文件中,它们显示了以下图片: 我想要的是片段A/B tablet UI。然而,在本页中,没有一个地方给出了这样做的示例-碎片管理器似乎一次只处理一个碎片-这与图片所描绘的完全相反。这让我觉得它在XML中使用。。。但

在安卓3.0及以上版本上,安卓团队极力要求您在活动中使用片段。我认为这很有用,但我希望能够在我的应用程序中处理点击事件。我在应用程序的右侧使用了一个列表片段,因此在托管该片段的活动中会执行onclick(或任意单击侦听器)。因此,我不得不从将项目放在XML中转向使用片段管理器

在设计文件中,它们显示了以下图片:

我想要的是片段A/B tablet UI。然而,在本页中,没有一个地方给出了这样做的示例-碎片管理器似乎一次只处理一个碎片-这与图片所描绘的完全相反。这让我觉得它在XML中使用。。。但是我怎么才能得到一次机会呢?这些文件对我来说没什么意义。它显示了一件事,然后说了另一件事。如果我想移除平板电脑上的碎片A怎么办?添加尚不存在的片段C?如果您尝试使用片段管理器,这可能吗

如果Fragment manager使用超过1个片段,我想我不明白,如果它使用了,我应该如何使用它来获取图片中的一个项目,比如平板电脑——左边(A)是一个列表视图,右边(B)是任何东西。没有片段的ID,我不知道如何访问它

不确定这是否相关,但以下是我的一些代码:

将片段添加到我在指南中创建的单个框架布局中

//Activity              
FragLaunch launchPane = new FragLaunch();
                // In case this activity was started with special instructions from an Intent,
                // pass the Intent's extras to the fragment as arguments
                // firstFragment.setArguments(getIntent().getExtras());

                // Add the fragment to the 'fragment_container' FrameLayout
                getFragmentManager().beginTransaction()
                        .add(R.id.launch_frag_container, launchPane).commit();
            }
另外,在7英寸平板电脑的纵向模式下,我希望它使用一个可切换的viewpager。当我用XML设计它时,它非常有魅力,但现在我必须访问listfragment,它不起作用(无法访问,因为我不能有两个片段)

FragLaunch内容视图的XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:gravity="center_vertical"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/initial_directions"
        style="@style/textScalar.Roboto.Light"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/initial_directions"
        android:layout_marginBottom="30dp"
        tools:context=".Launch" />

</LinearLayout>

我想让这张照片以片段A的形式出现在照片中: FragHistory.java/xml用于片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/spamhistory"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Spam History" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:drawSelectorOnTop="false" />

</LinearLayout>


有人对此有什么见解吗?

如果您希望您的片段能够通信,那么您需要使用接口,

对于onClick事件,只需为需要接收onClick事件的视图设置onClick侦听器。如下所示:

sampleView.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        //Your code here
    }
});
至于片段事务,它在其中的某个地方(我记不清确切的位置)指出,当两个片段同时显示在屏幕上时(与大屏幕一样),它不会交换片段,而只是更新它。您所需要担心的是进行正确的调用。因此,如果您想删除片段,只需调用remove()。或者,如果要将其替换为片段C,请调用replace()并将片段C作为参数传入

你能澄清你关于ViewPager的问题吗?你说的“必须访问它”是什么意思

希望这有帮助

编辑:我是apoplogize,我误解了你的问题。下面是如何一次向屏幕添加多个片段的简要介绍

1。执行运行时检查,确保设备屏幕足够大,可以显示多个片段

2.如果屏幕足够大,请将内容视图设置为使用一个布局,该布局对要添加的每个片段都有一个FrameLayout

3.之后,抓取您要使用的每个片段的引用

4.然后使用FragmentManager向每个布局添加一个片段。如下所示:

FirstExampleFragment fragment1 = new FirstExampleFragment();
SecondExampleFragment fragment2 = new SecondExampleFragment();

getSupportFragmentManager().beginTransaction().add(R.id.example_framelayout1, fragment1)
.add(R.id.example_framelayout2, fragment2).commit();

允许片段之间通信的另一个好方法是使用事件总线,如事件总线。Otto允许组件以解耦的方式发布事件和订阅事件

在您的特定情况下,当用户选择列表中的一个项目时,您的列表片段可以发布一个事件(可以包括已选择的项目)您的内容片段可以订阅这些事件,并在接收到新事件时相应地更新其内容。这一切都可以在不直接耦合两个片段的情况下完成,也不必定义其他接口


我知道这并不能回答你的全部问题,但我认为这可能对你的片段之间的通信很有用……YMMV。

我认为它被称为视图寻呼机。我现在没有源代码。基本上是操作栏选项卡,你可以左右滑动来切换选项卡。它是一个具有多个视图的单一视图e子视图。我想知道的是如何使用碎片管理器同时在屏幕上显示碎片A和B,因为它们不会在任何指南中告诉您如何执行此操作。viewpager工作正常,但我没有按钮,因为我现在只是添加它们。我更新了答案,向您展示如何同时在屏幕上添加两个碎片。请原谅se让我知道你是否需要澄清。它有效,仍然需要弄清楚为什么当我再次旋转它时,它不再显示任何内容。我知道它与事务有关。它填充UI的速度明显较慢,几乎为2整秒。在UI线程上没有做太多。这个答案很好。如果它显示了如何重复,那会更好花边的内容视图。(FWIW我想出来了,但如果有一天你想编辑它,我不会抱怨的。:-)