我有一个包含片段的布局如下:
<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" />
现在,我需要获取此片段并进行转换,以便我可以操作它并显示更新。我怎么能这样做?!
编辑:我认为我已经设法获得了片段,但是当我更改某些变量时,更改不会出现!答案 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)