大家都知道,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,然后就可以调用里面的方法了,
谢谢大家,如果有错误,欢迎指正.