主要记录一下在学习ListView的时候遇到的一些不会的知识点
ListView是一个可以滑动的列表界面,其中每一行都可以理解为ListView的一个子项View,根据设置的布局来显示,每一行的样式都是一样的,只不过显示的数据不一样。而每一个子项要显示的View和具体数据要通过适配器(Adapter)来传递给ListView。ListView 针对List中每个item,要求 Adapter “给我一个视图” (getView)。
ArrayAdapter(Context context, int item, T[] objects):数组适配器,这个适配器使用有一定的局限性,只能显示一行文本数据。
Context是上下文对象
item为布局Id,即ListView每一个子项的样式,系统提供了下面几个模板布局:
1) simple_list_item1:单独的一行文本框
2) simple_list_item2:有两个文本框组成
3) simple_list_item_checked每项都是由一个已选中的列表项
4) simple_list_item_multiple_choice:都带有一个复选框
5) simple_list_item_single_choice:都带有一个单选框
data为要显示的数据,这里是一个泛型的数组对象
如果需要自定义ArrayAdapter适配器,就需要继承ArrayAdapter并重写getView()方法,再构建不同的列表项。其中getView()方法在每个ListView子项被滚动到屏幕内的时候会被调用,通过getItem()得到当前项的实例,然后使用LayoutInflater来为这个子项加载我们传入的布局。
LayoutInflater.from(context) 从给定的上下文中获取LayoutInflater获取,LayoutInflater可以理解为一个视图填充器。
LayoutInflater.inflate(int Resourece,ViewGroup root,Boolean attachToRoot ):将一个.xml布局文件转为View
Resourece为View布局的ID,在ListView中就是子项的布局
root是生成的层次结构的根视图,在ListView中的意思是整个ListView界面的布局
attachToRoot:如果root为null,attachToRoot将失去作用,设置任何值都没有意义如果root不为null,attachToRoot设为true,则会给加载的布局文件(即ID为Resourece的布局)的指定一个父布局,即root;如果root不为null,attachToRoot设为false,则会将布局文件最外层的所有layout属性进行设置,当该view被添加到父view当中时,这些layout属性会自动生效;在不设置attachToRoot参数的情况下,如果root不为null,attachToRoot参数默认为true;
getItem()、getContext ()、getView()、getActivity()、getResources():
getView(int position,View converView,ViewGroup parent):getView()方法在刚启动ListView界面时显示屏幕内所有的ListView子项时和有新的ListView子项被滚动到屏幕内的时候会被调用,通过getItem()得到当前项的实例,返回的是一个View,也就是与Adapter数据对应的相应位置的行。
position是位置,一般Adapter都是很多类型一样的数据展示在界面,该属性是判断显示在界面上的是第几个,通过position在Adapter自定义的数组或者集合中取值。并展示在界面上。
converView 是展示在界面上的一个item,即每一行的View。每次显示一个item都调用一次getview方法但是每次调用的时候covertview为空(因为还没有旧的view),当显示完了之后。如果屏幕移动了之后,并且导致有些Item(也可以说是view)跑到屏幕外面,此时如果还有新的item需要产生,则这些item显示时调用的getview方法中的convertview参数就不是null,而是那些移出屏幕的view(旧view),我们所要做的就是将需要显示的item填充到这些回收的view(旧view)中去,最后注意convertview为null的不仅仅是初始显示的那些item,还有一些是已经开始移入屏幕但是还没有view被回收的那些item。
parent 这个属性是加载xml视图时使用,在ListView中的意思是整个ListView界面的布局
getItem(int position):获得当前传入数据的第position位置的值
getContext():getContext():这个是View类中提供的方法,在继承了View的类中才可以调用,返回的是当前View运行在哪个Activity Context中。
getActivity():获得Fragment依附的Activity对象。Fragment里边的getActivity()不推荐使用原因如下:这个方法会返回当前Fragment所附加的Activity,当Fragment生命周期结束并销毁时,getActivity()返回的是null,所以在使用时要注意判断null或者捕获空指针异常。
getResources():获取放在资源文件/res中的内容。