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

大家都知道,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,然后就可以调用里面的方法了,


谢谢大家,如果有错误,欢迎指正.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值