布局加载的方法以及参数说明
布局加载的方式:
listview中适配器getView方法里获取获取布局控件的方法:
//第一种--获得布局加载器
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.listview_item_city, null);
//第二种
LayoutInflater layoutInflater2 = LayoutInflater.from(MainActivity.this);
View view = layoutInflater2.inflate(R.layout.listview_item_city, null);
//第三种
LayoutInflater layoutInflater = MainActivity.this.getLayoutInflater();
View view = layoutInflater.inflate(R.layout.listview_item_city, null);
//第四种
View view = View.inflate(MainActivity.this, R.layout.listview_item_city, null);
第四种与第二种基本相同,第四种方式的内部使用的是第二种
View.inflate(MainActivity.this, R.layout.listview_item_city, null) = LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item_city, null)
而第二种与第一种基本相同
LayoutInflater.from(MainActivity.this).inflate(R.layout.listview_item_city, null) =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate(R.layout.listview_item_city, null)
LayoutInflater的使用:
LayoutInflater的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。
具体作用:
1、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;
2、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素
参数说明:
LayoutInflater.from(MainActivity.this).inflate(int Resource, ViewGroup parent,boolean attachToRoot);
参数一:资源id 参数二:加载view布局的父布局(例如,listview) 参数三:是否添加到父布局
parent为null: attachToRoot不管设置为什么值,都是没有用的,同时这个布局的最外层参数就没有效了
parent不为null:
attachToRoot为false,表示不加载父布局,返回的是当前view视图的布局
attachToRoot为true,表示加载父布局,返回的是包含所有view视图的父布局
其实View必须存在于一个父布局中,这样layout_width和layout_height才会有效,因为这两个参数是相对于父布局中的宽高
所以:inflate(int resource, ViewGroup root, boolean attachToRoot)的第二个参数不为空,resource的最外层布局参数才会有效,否则就无效了