学习Android遇到的问题——LayoutInflater

前言

对于像我这样的android初学者来说,LayoutInflater是个很模糊的概念,I can’t feel it!我只知道在自定义控件的时候构造函数中会用到LayoutInflater.from(mContext).inflater(layout_id, this);还有重写 适配器布局会用到LayoutInflater.from(getContext()).inflater(layout_id, null)

从字面的意思来看,Layout是布局的意思,Inflater是充气器的意思;连起来就是布局充气器,或者布局填充器,也有人说是布局加载器。

而我现在对于LayoutInflater的理解也仅仅是他可以将xml布局实例化为View对象。

引入问题

假设,你要用到一个View(比如一个设计好的登陆界面),你要经常用,而且界面布局是固定的。你会怎么做呢?我可不可以先在xml文件中先布局好,然后再把这个xml布局放到一个View对象上呢?

看到这里,你可能会说我用setContentView(R.layout.activity_main);不就好了,直接就可以加载啊。是的,使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面。但如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。

这个时候,LayoutInflater就登场,setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件实例化为View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。

那么具体怎么用,怎么转化呢?

具体方法

获得LayoutInflater实例

首先我们要知道获取LayoutInflater实例,有三种方式:

1、LayoutInflater mInflater = getLayoutInflater();//调用Activity的getLayoutInflater()

2、LayoutInflater mInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

3、LayoutInflater mInflater = LayoutInflater.from(context);
它们的本质都是一样的。一般来说(就我来说),第三种方法最常用。
下面我就用第三种方法举个例子。

LayoutInflater的使用

这里我新建了两个xml文

你可能感兴趣的:(Android,inflater,android)