当前位置: 首页 > news >正文

Android:ViewAdapter

3.11 View&Adapter

View是视图文件,表示页面的框架结构。Adapter适配器,通过适配器填充数据信息。

1、简单ListView使用

    ListView用来显示一个相同样式的视图列表。

    ListView无法直接将数据显示,需要先将Data数据放入Adapter适配器,然后ListView绑定适配器。

操作步骤:

    1.在layout布局中创建ListView;

    2.在layout对应ActivityActivity中创建对应ListView对象listView;

    3.创建数据ArrayList<String>类型的list;

    4.创建ListViewAdapter类继承BaseAdapter,在Activity中创建ListViewAdapter类对象listViewAdapter,传入参数list,上下文;

    5.调用listView对象的setAdapter方法,绑定listViewAdapter;

示例:

创建t_listview.xml文件,ListView标签,设置id。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><ListViewandroid:id="@+id/ListView1"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>

创建ListViewAdapter类继承BaseAdapter类。

public class ListViewAdapter extends BaseAdapter {private ArrayList<String> strlists;private Context mContext;public  ListViewAdapter(ArrayList<String> list,Context context){this.strlists=list;this.mContext=context;}//获取list大小@Overridepublic int getCount() {return strlists.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}//创建空的View,放入数据//position当前位置//ViewGroup parent:每次调用都有一个空容器,返回值的view添加到空容器,getContext方法获取容器context//convertView:ItemView显示内容@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//创建一个空TextViewTextView textView = new TextView(mContext);//设置宽高textView.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT,AbsListView.LayoutParams.WRAP_CONTENT));//设置文本大小textView.setTextSize(30);//设置文本textView.setText(strlists.get(position));return textView;}}

创建ListViewActivity类继承Activity。

public class ListViewActivity extends Activity {//上下文private Context mContext;private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//绑定layoutsetContentView(R.layout.t_listview);//上下文初始化mContext = ListViewActivity.this;//获取ListViewlistView = (ListView) findViewById(R.id.ListView1);//创建数据listArrayList<String> list = new ArrayList<String>();//添加数据for(int i=0;i<5;i++){list.add("listView"+i);}//创建ListViewAdapter对象ListViewAdapter listViewAdapter = new ListViewAdapter(list,mContext);//ListView绑定AdapterlistView.setAdapter(listViewAdapter);}}

2、BaseAdpater优化

1.使用LayoutInfalter优化

当ListView中的内容不是简单的字符串表时,ListViewAdpater类中的getView方法中就不是简单创建一个TextView可以解决问题,需要创建多个View组件,这个时候,我们需要根据ListView中子Item的结构自动生成View组件。

示例:

创建子Item的布局文件t_listview_item.xml。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="30dp"></TextView></LinearLayout>

修改getView方法中逻辑:

//LayoutInflater类将一个布局变成一个类LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());//inflate参数1:布局页面,参数2:root是否加入到某个容器View view =  layoutInflater.inflate(R.layout.t_listview_item,null);TextView textView = view.findViewById(R.id.tv1);textView.setText(strlists.get(position));return view;

Android提供一些固定的子Item布局:

示例:

//android提供了一些布局页面android.R.layout.XXXX//示例:android.R.layout.simple_list_item_1View view1= layoutInflater.inflate(android.R.layout.simple_list_item_1,null);

2.使用convertView优化

相关文章:

  • RabbitMQ_00000
  • 开发实践11_Blog
  • 【Java数据结构】ArrayList和LinkedList的遍历
  • 数据结构-->线性表-->顺序表
  • Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件
  • 类与对象(终章)——友元,内部类,匿名对象
  • 【Unity3D小技巧】Unity3D中UI控制解决方案
  • 私有化部署一个吃豆人小游戏
  • powershell 接收一个端口tcp数据复制转发到多个目的
  • [linux c]linux do_div() 函数用法
  • 《数电》理论笔记-第1章-逻辑代数基础
  • 数据结构--基础知识
  • 2019年江苏省职教高考计算机技能考试——一道程序改错题的分析
  • Spring是怎么解决循环依赖的
  • U盘显示空间小于实际U盘空间的解决方案
  • [deviceone开发]-do_Webview的基本示例
  • [nginx文档翻译系列] 控制nginx
  • dva中组件的懒加载
  • eclipse(luna)创建web工程
  • ES6 学习笔记(一)let,const和解构赋值
  • Golang-长连接-状态推送
  • Java应用性能调优
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • laravel with 查询列表限制条数
  • Laravel5.4 Queues队列学习
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 2.3、2.4 知识点小结
  • 爱情 北京女病人
  • 前端_面试
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 新手搭建网站的主要流程
  • #pragma multi_compile #pragma shader_feature
  • $.ajax()参数及用法
  • (7)STL算法之交换赋值
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)setTimeout 和 setInterval 的区别
  • (转)平衡树
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***通过什么方式***网吧
  • .axf 转化 .bin文件 的方法
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Micro Framework初体验
  • .net MVC中使用angularJs刷新页面数据列表
  • .net wcf memory gates checking failed
  • .Net Winform开发笔记(一)
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET中的Exception处理(C#)
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • [20180224]expdp query 写法问题.txt
  • [AIGC] Spring Interceptor 拦截器详解