UI开发的点点滴滴 难控件的详解 第三章

 

最常用和最难用的控件 ListView

listView的用法:

                                         

在布局文件中对控件进行添加 ------------------------------------------------------------------------------------------   ArrayAdapter<String> adapter = new  ArrayAdapter<String>(上下文,ListView子项布局id,要配置的数据)

ListView.setAdapter(adapter);将ListView显示出来

定制ListView的界面:

1.新建类:

public class Fruit{

private String name; private int imageId; 

public Fruit(String name,int imageId){

this.name= name;this.imageId = imageId;}

get方法()

}

2.自定义布局文件:

新建布局,按照要求进行定位方式的美化

3.自定义适配器:一定要继承自ArrayAdapter,并且指定泛型为<新建的类名称>

                                                       

FruitAdapter构造函数用于将上下文,子项布局id,以及数据传进来 ,将子项布局id改变为全局变量 -------------重写getView()这个方法在每个子项被滚动到屏幕内时调用   返回值为view

LayoutInflate.from(getContext).inflate(resourceId,parent,false)第三个参数表示只让在父布局中声明生效,但不为View添加父布局 (记住就好)  getItem(position);获取实例

       点击事件:                   

 

ListView的缺点:运用技巧提升运行效率ListView性能变差 ,扩展性不好

更强大的滚动控件 RecycleView(可以实现横向滚动)

 1.添加依赖库

      布局中添加RecycleView控件                

      修改完成后点击Syn Now   ---------------------------------------------------------------------------------------------          宽高都设为match_parent占满屏幕 控件不是SDK内置控件,所以要写完整包名

2.为RecycleView准备适配器  新建类,让这个适配器继承自RecyclerView.Adapter泛型指定为<类名.ViewHolder> 其中ViewHolder是定义的内部类

                            

1.首先定义内部类ViewHolder继承自RecycleView.ViewHolder 然后ViewHolder构造函数传入一个View参数,这个参数通常就是RecyclerView子项的最外层布局 就可获取布局中对的控件    

2.FruitAdapter构造函数作用:将数据源变为全局变量      3. 重写它的三个方法  onCreateViewHolder创建ViewHolder实例 加载fruit_item布局     onBindViewHolder对RecycleView子项进行赋值

 getItemCount() 告诉RecyclerView一共有多少子项 直接返回数据源长度 

3.RecyclerView使用:  

                

LinearLayoutManager新建线性布局对象 setLayoutManager指定布局方式

使用RecyclerView实现横向布局排列:

                                                 

修改子项布局id的属性               -------------------------------------------------------------------------------------------------------             LinearLayoutManager.setOrientation()设置布局排列方式 

瀑布流布局:

在MainActivity中代码修改

                     

    创建StaggeredGridLayoutManager实例,接受两个参数,第一参数指定布局列数,2参数布局排列方式

       把水果名称随机进行遍历,保证各水果名字差距大,子项高度也不同

StringBuilder实例:单线程操作字符串缓冲区下操作大量数据

RecyclerView点击事件:

(需要我们自己去给子项具体的View添加事件监听)

                          

 fruitView是子项布局点击事件

 

 

 

 

                          

 

 

 

 

 

 

                                                           

 

posted @ 2019-02-27 14:33  后来的后来啊  阅读(124)  评论(0)    收藏  举报