75

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

<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" />

现在,我需要获取这个片段并投射它,以便我可以操纵它并显示更新。我怎么能这样做?!

编辑:我想我已经设法得到了片段,但是当我改变一些变量时,改变不会出现!

4

5 回答 5

140

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

getSupportFragmentManager().findFragmentById(R.id.yourFragmentId)
于 2014-05-11T13:06:47.313 回答
22

如果片段嵌入在另一个片段中,则需要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" />

在代码中,您可以像这样获取片段实例:

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

if (chatFragment != null) {
   transaction.hide(chatFragment);
}
transaction.commit();
于 2015-10-14T03:03:10.400 回答
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();
}
于 2012-12-17T09:44:05.803 回答
1

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

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

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

于 2012-12-17T09:27:07.107 回答
1

If Fragment is included inside the layout file of Activity then it can be referenced by SupportFragmentManager like...

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

If Fragment is included inside the layout file of another Fragment then it can be referenced by ChildFragmentManager like...

 MyFragment myFragment= (MyFragment)getChildFragmentManager().findFragmentById(R.id.FRAGMENTID)
于 2020-02-15T09:28:42.000 回答