从fragmentActivity刷新片段UI

时间:2014-07-18 21:14:40

标签: android android-fragments android-viewpager android-fragmentactivity fragmentpageradapter

我想从FragmentActivity中更改片段中的ImageView(在代码中创建)。 (XML中没有片段和标记)。

从FragmentActivity扩展并从GooglePlayServicesClient.ConnectionCallbacks实现的MainActivity:

...
FragmentAdapter mAdapter;
ViewPager mPager;
...

public void onCreate(Bundle savedInstanceState){
    ...
    FragmentManager fm = getSupportFragmentManager();
    mAdapter = new FragmentAdapter(fm);
    mPager.setAdapter(mAdapter);
    ...}

@Override
public void onConnected(Bundle connectionHint){
//*** I want to change a ImageView on Fragment1 here
}

从FragmentPagerAdapter扩展的FragmentAdapter:

...
private FragmentManager mFragmentManager;

public FragmentAdapter(FragmentManager fm){
    super(fm);
}

@Override
public Fragment getItem(int pos){
// String name = makeFragmentName(R.id.mainPager, pos);
// Fragment fragmentObject = mFragmentManager.findFragmentByTag(name);
Fragment fragmentObject = null;

switch(pos){
    case 0:
        fragmentObject = new Fragment1();
        break;
    ...
}

return fragmentObject;
}
...

//private static String makeFragmentName(int viewId, iont index){
    //return "android:switcher:" + viewId + ":" + index;
//}

根据this主题更改片段中的元素,来自fragmentActivity:

从Fragment扩展的Fragment1:

private ImageView IMGThisImageShouldChange = null;

public View onCreateView(...){
    IMGThisImageShouldChange = (ImageView)v.findViewById(R.id.TargetImage);
    ...
}

public void changeImageView(int resourceId){
    IMGThisImageShouldChange.setImageResource(resouirceId);
}

本主题中的注释行说明:

  

//每次设置文本时都不要创建新对象。使用相同的   用于视图寻呼机的片段对象。

那么如何从MainActivity访问fragmentObject,调用changeImageView方法?

如果我应该通过标签找到片段,根据this主题,我应该在哪里设置标签以及如何查找?

1 个答案:

答案 0 :(得分:5)

所以显然可以根据您的具体需求进行调整,但这是我用于我的应用程序的内容。

 Fragment frag = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + mPager.getCurrentItem());
    if(frag!=null&&mPager.getCurrentItem()==0)
        {
           ((Fragment1) frag).changeImageView(1);
        }