您的位置:首页 > Web前端

任意类,非acvitity类操作Fragment的方法,Fragment与任意类通信

2014-06-26 17:10 246 查看
大家都知道,Fragment 和Activity或者Fragment之间的通讯,网上搜索一大堆。而一个非Activity或fragment的类跟Fragment通信就比较少了。今天涉及到这样的问题,于是就稍微研究了下。下面讲讲:如果大家有更好的方法,更好的思路,或者我有说错的话,强烈欢迎各位大神指正我。谢谢。

补充一下知识先:WeakReference,看这段代码或许你就懂的了,

public class WeakRefTest
{
public static void main(String[] args)
{
String a = new String("对象还在内存中!");
WeakReference b = new WeakReference(a);
System.out.println(b.get());
//移除强引用
a = null;
//通知gc...
System.gc();
//对象被回收了么?
if(b.get() == null)
System.out.println("被回收了!");
else
System.out.println(b.get());
System.exit(0);
}
}


需求:

一个普通类要执行一个Fragment类中的一个方法。

步骤:

一、配置环境参数:

1、首先在管理该Fragment的activity(如:MainActivity)中,对MainActivity进行弱引用,WeakReference,就可以得到当前对象的弱引用。把弱引用对象传过去。

WeakReference<MainActivity> mMainActivityWeakReference = new WeakReference<MainActivity>(this);


2、在普通类中声明静态MainActivity的变量,提供静态set方法,然后在MainActivity中执行setActivity(传递过去)

private static WeakReference<MainActivity> mMainActivity;
public static void setActivity(WeakReference<MainActivity> mainActivityWeakReference) {
PeopleListElement.mMainActivity = mainActivityWeakReference;
}
二、在普通类中。看代码

1、 FragmentManager fm = mMainActivity.get().getSupportFragmentManager();

mMainActivity.get():这就涉及到弱引用的知识。如果MainActivity(this)这个对象没有被gc回收那么, mMainActivity.get()就能得到它指向它,这样写你就懂了MainActivity mainActivity = mMainActivity.get();。这样就可以得到FragmentManager了。

2、有了FragmentManager还有啥问题的呢?还是说说吧,通过fm.findFragmentByTag("selection")找到要操作的Fragment,然后就可以调用里面的方法了,

谢谢大家,如果有错误,欢迎指正.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐