从 fragmentActivity 刷新片段 UI

Posted

技术标签:

【中文标题】从 fragmentActivity 刷新片段 UI【英文标题】:refresh fragment UI from fragmentActivity 【发布时间】:2014-09-10 02:49:19 【问题描述】:

我想从 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主题更改fragment中的一个元素,来自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主题,我应该在哪里设置标签以及如何找到?

【问题讨论】:

jgriffsta 的回答是正确的。 onCreate() 方法中的标记将为空(因为片段事务是异步的,但如果您在 onConnected() 回调中使用该代码应该没问题。 @Luksprog 你说得对。那是工作。但我将我的技术改为:***.com/questions/8785221/…。但是在 getItem() 中,我对 newInstance() 没有任何想法。 1-该功能的代码是什么? 2-哪种技术更好? 1.它是一个静态方法,它返回声明它的类的对象(这是一种常见的 java 模式) 2. 您链接到的代码更好,因为它不依赖于某些可以更改的标签(破坏您的应用程序) @Luksprog 我没有得到 1 分!我的问题 getItem()... 是否正确?或者我应该检查 fragmentObject 是否为空,然后通过 makeFragmentName 创建它?或者新技术处理这个?(这意味着:空,重新创建,恢复,...) 你的getItem()方法是正确的,你需要返回一个片段对象(你可以通过实例化类或使用newInstance()静态方法来实现)。 【参考方案1】:

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

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

【讨论】:

我将我的技术更改为:***.com/questions/8785221/… ;;;;;不过非常感谢,你的回答还是对的。

以上是关于从 fragmentActivity 刷新片段 UI的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何从 FragmentActivity 访问 Fragment

android fragmentActivity 可以有意图吗?

如何从活动意图到特定片段?

是否可以在片段中手动调用 onCreateView?

从fragmentactivity导入文本到fragment

来自 FragmentActivity 的片段在某些设备上不显示背景图像