如何在 XML 布局中添加片段

我有一个布局,其中包括一个片段如下:

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

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

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

62930 次浏览

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

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

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

我在 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();
}

您可以得到如下片段实例:

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

如果该片段嵌入到另一个片段中,则需要 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();

如果片段包含在 活动的布局文件中,那么它可以被 SupportFragmentManager 引用,如..。

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

如果片段包含在另一个 碎片的布局文件中,那么它可以被 ChildFragmentManager 引用,如..。

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