layoutInflater.inflate()方法似于findViewById()方法,不同点是layoutInflater.inflate()是用来找res/layout/下的XML布局文件,并且实例化;而findViewById()是找XML布局文件下的具体控件(如:Button、TextView等等)。
使用场景:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用layoutInflater.inflater()来载入界面。
2、对于一个已经载入的界面,可以使用activity.findViewById()来获取界面中的控件。
LayoutInflater
获取LayoutInflater实例的3种方式:
// 1、在Activity中直接调用getLayoutInflater()来获取
LayoutInflater inflater = activity.getLayoutInflater();
// 2、通过传入context来获取
LayoutInflater inflater = LayoutInflater.from(context);
// 3、调用Context的getSystemService()来获取
LayoutInflater inflater =
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
这3种方式本质一样,Activity的getLayoutInflater()方法中调用的是LayoutInflater.from(context)方法,而LayoutInflater.from(context)方法中调用的是context.getSystemService()方法,所以最终都是调用context.getSystemService()方法。
layoutInflater.inflate()
一般有如下2种方法可供选择
1、View inflate (int resource, ViewGroup root)
2、View inflate (int resource, ViewGroup root, boolean attachToRoot)
其中,第1个参数resource表示要加载的XML布局文件;第2个参数root表示再套上一个父容器root,如果不需要就传null;第3个参数attachToRoot表示是否将当前加载的布局套上一个父容器。
注意:如果使用第1种只含2个参数的方法传入了一个root就表示给布局再套上一个父容器root,attachToRoot默认为true。
使用layoutInflater.inflate()加载布局
View view = getLayoutInflater().inflate(R.layout.button_layout, null);