暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一学之Android中的view、viewGroup,Activity、Fragment、Context之间的关系

程序员的日记本 2017-11-26
1090


按照计划安排,这期的内容应该是说一说Android与外部的通信机制。不过在前面的文章发布后一些朋友也私下提出一些问题,因此在这篇文章中进行统一回答。


主要说一说view、viewGroup、Activity、Fragment、Context之间的关系,在调用API的时候,应该怎么样传递参数?


View和ViewGroup
1


我们前面所讲到的不管是多种Layout还是ActionBar、RadioGroup、RadioButton等都离不开View和ViewGroup的范围。那么什么是View,什么又是ViewGroup?下面我们使用RadioButton和RadioGroup为例进行说明:



备注:虚线箭头表示实现关系;实线箭头表示继承关系;偏斜的字体表示抽象类。


从上图中可看看出ViewGroup具有View的一些特性,同时具有了ViewParent以及ViewManager的特性;所以ViewGroup具有管理View的特性。因此我们使用的ViewPager其实是属于ViewGroup,同时类似于的ListView也是属于ViewGroup的。这也是为什么我们在使用下面代码的时候,viewGroup可以传递一个空值得原因,因为我们的布局文件已经有管理器了。


LayoutInflater.from(this).inflate(int , viewGroup)


Fragment、Activity、Context
2


我们经常在调用一些API的时候需要你传递一个Context的东西过去,Context汉译过来就是上下文的意思。那么这个上下文是个什么东西呢?说白了就是运行环境,例如Fragment的OnAttch函数在运行的时候就需要一个Context,这个Context就表示这个Fragment运行在什么样的环境下:

@Override
public void onAttach(Context context) {
    super.onAttach(context);    
   if
(context instanceof OnFragmentInteractionListener) {        mListener = (OnFragmentInteractionListener) context;    } else {        
       throw
new RuntimeException(context.toString()            + " must implement OnFragmentInteractionListener");    } }

大家都知道这里的context其实就是使用这个Fragment的Activity,但是为什么这里的context可以是一个Activity呢?我们看看下面的关系图就知道了:



是不是突然恍然大悟,原来Activity就是Context的子类。这里同时也解释了在Fragment中使用 getActivity() 返回的是FragmentActivity类型,我们确可以得到使用环境为AppCompatActivityActivtiy,因为他们也是一脉相承的。


因此,传递什么样的context,要看使用这个context的控件的生命周期。


下期提要
3


下期开始,我们将主要讲述Android与外部数据的通信,当然不会是接收数据和发送数据这么简单哦。


敬请期待!






长按,识别二维码,加关注,

可了解更多编程方面的知识,

让你看到每天一点点的进步。

谢谢点赞 + 分享!!!!!!


不积跬步,无以至千里;

不积小流,无以成江海。

文章转载自程序员的日记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论