我是靠谱客的博主 清新背包,最近开发中收集的这篇文章主要介绍监听Fragment B对用户是否可见——判断Fragment A切回到Fragmnet B、Fragment B跳到Activity 再从Activity返回到Fragment B,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景

      最近在开发中遇到了一个问题,我们的app主要是由底部Tab页的Fragment构成,然而需要监听当某一个Fragment对用户可见时就需要刷新当前的Fragment。

而在不同的使用情况下,判断Fragment是否可见的方法是不一样的。下面对这些不同的使用情况分开分析

     1.现在安卓市场上基本上的app都会做tab页,而tab页基本都是通过android自带的ViewPager或者RadioGroup实现的。ViewPager有这样一个特点,当滑到某一个Tab时,它会同时加载这个tab的左右两个tab页,比如我从1页面切换到了2页面,那么3页面的onResume也被调用了,但是3页面其实对用户是不可见的。这时候我们就需要监听setUserVisibleHint来判断到底对用户是否可见。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
   if(isVisibleToUser){
   //TODO now it's visible  to user
   } else {
   //TODO now it's invisible to user
   }
}

      2.RadioGroup就没有同时加载左右两个View的属性,但当某一个RadioButton被选中时,由不可见状态转变成可见状态,可以使用onHiddenChanged来判断fragment的显示状态。

//判断当前的fragment显示状态
  @Override
  public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) {
      //TODO now it`s visible to user
    }else {
     //TODO now it`s invisible to user
    }
   
  }

      说到这里,是不是会觉得这么简单就实现了监听,请稍安勿躁,继续往下看完。我们依然不能完全依赖setUserVisibleHint这个方法来判断是否ViewPager中的页面是否对用户可见。因为该方法只有在Fragment之间切换的时候被调用。同理在RadioGroup中不能只使用onHiddenChanged来监听某一个Fragment的显示状态因为还存在一种情况比如我从一个Fragment A跳转到另一个activity,然后再回到这个Fragment A,那么ViewPager中的这个Fragment A的 setUserVisibleHint方法和RadioGroup中的onHiddenChange的方法是不会被调用的

那么针对这种情况,用广播的方法实现监听Fragment的显示状态

在Activity的onDestory方法中发送广播:

@Override
  public void onDestroy() {
    super.onDestroy();
    Intent intent = new Intent("android.intent.action.CART_BROADCAST");
    intent.putExtra("data","ToDO");
    LocalBroadcastManager.getInstance(AddFriendToContact.this).sendBroadcast(intent);
    sendBroadcast(intent);
  }

在Fragment中重写onActivityCreated方法

 @Override
 public void onActivityCreated(Bundle savedInstanceState) {
     super.onActivityCreated(savedInstanceState);
        LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(getActivity());
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.CART_BROADCAST");
        BroadcastReceiver mItemViewListClickReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent){
                String msg = intent.getStringExtra("data");
                if("ToDO".equals(msg)){
                    //TODO YOU DO!
                }
            }
        };
        broadcastManager.registerReceiver(mItemViewListClickReceiver, intentFilter);
    }
返回到Fragment时 ,在onActivityCreated方法中接收到广播就说明当前的Fragment处于可见状态。 以上方法同样可以用于监听当前Fragment的显示状态来刷新数据


最后

以上就是清新背包为你收集整理的监听Fragment B对用户是否可见——判断Fragment A切回到Fragmnet B、Fragment B跳到Activity 再从Activity返回到Fragment B的全部内容,希望文章能够帮你解决监听Fragment B对用户是否可见——判断Fragment A切回到Fragmnet B、Fragment B跳到Activity 再从Activity返回到Fragment B所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部