如何在XML布局中添加片段

时间:2012-12-17 09:16:51

标签: android fragment

我有一个包含片段的布局如下:

<fragment
        android:id="@+id/mainImagesList"
        android:name="com.guc.project.ImagesList"
        android:layout_width="match_parent"
        android:layout_height="62dp"
        android:layout_below="@+id/addimagebutton"
        android:layout_weight="1"
        android:paddingTop="55dp" />

现在,我需要获取此片段并进行转换,以便我可以操作它并显示更新。我怎么能这样做?!

编辑:我认为我已经设法获得了片段,但是当我更改某些变量时,更改不会出现!

5 个答案:

答案 0 :(得分:117)

您可以按如下方式获取片段实例:

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)

答案 1 :(得分:14)

如果片段嵌入在另一个片段中,则需要getChildFragmentManager而不是getFragmentManager。 例如,在布局xml中定义片段如下:

<fragment 
    android:name="com.aventlabs.ChatFragment"
    android:id="@+id/chatfragment"
    android:background="#ffffff"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:layout_marginTop="50dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp" />
在Code中,你可以得到像这样的片段实例:

FragmentManager f = getChildFragmentManager();
FragmentTransaction transaction = f.beginTransaction();
chatFragment = f.findFragmentById(R.id.chatfragment);

if (chatFragment != null) {
   transaction.hide(chatFragment);
}
transaction.commit();

答案 2 :(得分:4)

我在android中完成了相同的操作,并且在使用接口时这是最简单的方法。我有一个活动有6个片段,我只需要更新其中的3个。

我用这个

    final Integer numeroFragments = ((PagerAdapterOfe) mViewPager.getAdapter()).getCount();

    for (int i=0; i<numeroFragments; i++) {
        Object fragment = ((PagerAdapterOfe) mViewPager.getAdapter()).getItem(i);

        // If the fragment implement my interface, update the list
        if (fragment instanceof IOfertaFragment){
        ((IOfertaFragment) fragment).actualizaListaOfertas();
        }
    }

其中,PageAdapterOfe是我的活动片段适配器。我循环所有片段并搜索那些实现我的界面的片段,当我找到一个片段时,我执行我的界面定义的方法,那就是!

我在包含所有片段的活动中使用此代码,作为响应广播信号,您可以将其放在您需要的位置。

界面:

public interface IOfertaFragment {

    public void actualizaListaOfertas();
}

答案 3 :(得分:1)

您可以使用findFragmentById(如果您知道它包含在其中的组件)或findFragmentByTag(如果您知道其标记)找到该片段

我不知道您要更新哪些变量,但您可以使用FragmentTransaction API将该片段替换为另一个片段。

有关示例,请参阅http://developer.android.com/guide/components/fragments.html

答案 4 :(得分:1)

如果Fragment包含在 Activity 的布局文件中,则SupportFragmentManager可以引用它,例如...

MyFragment myFragment= (MyFragment)getSupportFragmentManager().findFragmentById(R.id.FRAGMENTID)

如果Fragment包含在另一个 Fragment 的布局文件中,则可以由ChildFragmentManager引用,例如...

 MyFragment myFragment= (MyFragment)getChildFragmentManager().findFragmentById(R.id.FRAGMENTID)