Skip to content

高级控件

ListView

需要包:android.weight.ListView

以列表显示数据源

  • entries:数据源
  • divids:列表项颜色

布局模式

通过setChoiceMode()进行设置。

  • ListView_CHOICE_MODE_NONE
  • ListView_CHOICE_MODE_SINGLE
  • ListView_CHOICE_MODE_MULTIPLE

通过资源进行数据绑定

通过数据绑定,以实现用一个组件绑定多组信息,需要使用Adapter绑定。

  1. 定义数组资源

    res/valus/array.xml中创建数组资源:

    1
    2
    3
    4
    5
    <string-array name="name">
        <item>数据项</item>
        <item>数据项</item>
        ……
    </string>
    
  2. 在布局中绑定数据源

    1
    2
    3
    <ListView
              ……
              android:entries="@array/name"
    

使用Adaptor进行数据绑定

  1. 创建数据源数组

    允许适应常量字符串数组或从资源文件array.xml中获取数据创建信息

    String[] arrayname =getResources().getStringArray(R.array.resname);
    
  2. 创建ArrayAdaptor对象

    ArrayAdaptor<type> adaptor=new ArrayAdaptor<type>(this,ListView的显示样式arraynaem);
    
  3. 选择布局模式

    listview.setChoiceMode(mode);
    
  4. 适配器绑定到控件上

    listview.setAdaptor(adaptor);
    

多行文本列表

  1. 创建数据源集合和数据源列表,分别存储单个列表项和多个列表项总和

    key为string,Value自定。

    map中的每个元素代表该列表项中的一行,多个map中保持格式一致性,即键值对数量相同、键名相同。

    ArrayList<Map<String,Object>> arr=new ArrayList<Map<String,Object>>();
    Map<String,Object> item1=new HashMap<String,Object>();
    
  2. 创建SampleAdaptor对象

    1
    2
    3
    4
    5
    6
    7
    SimpleAdaptor adaptor =new SampleAdaptor(
        this,
        arr,
        listView显示样式,
        new String[]{item的键名列表},
        new int[]{显示样式布局中的id}
    );
    
  3. 绑定适配器

自定义样式

  1. 创建自定义样式
  2. 创建数据源集合和列表,同多行文本列表
  3. 创建SampleAdaptor对象
1
2
3
4
5
6
7
SimpleAdaptor adaptor =new SampleAdaptor(
     this,
    arr,
    自定义listView显示样式,
    new String[]{item的键名列表},
    new int[]{显示样式布局中的id}
);

事件处理

通过AdapterView.OnItemClickListener接口实现堆特定选项的监听。

方法:

public void OnItemClick(Adapter<?> parent,View v,int position,long id){    
}
  • parent:绑定Adapter的View组件
  • view:选中项
  • position:选中项的数据在数据数组中的索引
  • id:选中项在项列表中的索引,通常和position相同

Grid View

需要包:android.weidget.GirdView

以二维可滚动网格展示。

  • columnWidth:列宽
  • horizontalSpacing:列与列之间的水平间距
  • verticalSpacing:行与行之间的 垂直间距
  • numColumns:列数,可设置为整数或auto_fit(默认2列,若设置了列宽则为屏幕宽度/列宽
  • StretchMode:设置拉伸模式
    • none:不拉伸
    • spacingWidth:拉伸列间的间距
    • columnWidth:拉伸列自身
    • spacingWidthUniform:均匀地扩展列和列之间的空间

绑定资源、设置适配器、自定义样式和事件监听与ListView相同。

Recycler View

需要自行创建自定义Adapter和LayoutManager两个类。

使用前需要在build.gradle(app)dependencies闭包中添加:

 implementation 'androidx.recyclerview:recyclerview:1.0.0'

自定义适配器类

继承RecyclerView.Adaper,必须定义一个继承于RecycleView.ViewHolder的内部类和重写三个方法:

  • 构造函数,初始化数据源集合
  • onCreateViewHolder:根据子项杨式布局文件创建自定义ViewHolder类实例
  • onBindViewHolder:每个子项被滚动到屏幕中时,把数据源中第x号的元素各组键值放进子项各个子控件中
  • getItemCount:返回子项数量
  • 继承RecyclerViewView.ViewHolder的自定义类

RecyclerView对象

支持三种内置布局:

  • LinearLayoutManager:线性布局的滑动列表
  • GridLayoutManager:网格布局
  • StaggeredGridLayoutManager:流式布局

事件处理

RecyclerView没有提供内置监听器,需监听其选项或选项的子控件,按以下两步实现:

  • 在自定义适配器类的内部类的构造函数获取事件源控件
  • 在onBindViewHolder方法中为事件源注册监听器对象,定义和重写匿名监听器类