Android移动应用开发学习笔记(listview和适配器的使用)

Marmara ·
更新时间:2024-09-20
· 793 次阅读

参考:https://www.bilibili.com/video/BV1fs411h7nF 视频做的笔记

文章目录1、用listview和BaseAdapter实现listView的入门1.1、布局文件1.2、MainActivity类2、listview的优化2.1、listview优化的原因:2.2、优化处理:3、listview显示复杂页面(在listview的一个item中显示图片和文字)3.1、activity_main.xml文件3.2、模板item.xml文件3.3、MainActivity 类4、获取打气筒的常用的api4.1、第一种4.2、第二种4.3、第三种5、ArrayAdapter的使用5.1、activity_main.xml文件5.2、item.xml文件5.3、MainActivity 文件6、SimpleAdapter的使用6.1、activity_main.xml文件6.2、MainActivity类7、将数据库中查询出的数据显示到listview中7.1、activity_main.xml文件7.2、item.xml文件7.3、MyOpenHelper类(数据库文件)7.4、MainActivity类8、BaseAdapter、SimpleAdapter、ArrayAdapter三者的区别 1、用listview和BaseAdapter实现listView的入门 在布局中定义listview控件 定义自己的适配器继承BaseAdapter 实现getCount和getView方法 1.1、布局文件 1.2、MainActivity类 package com.dsl.listView; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找到相应的控件 ListView lv = (ListView) findViewById(R.id.lv); //显示数据 lv.setAdapter(new MyListAdapter()); } //定义listview适配器 private class MyListAdapter extends BaseAdapter{ //展示一共有多少条数据需要显示 @Override public int getCount() { return 100000000; } //返回指定position位置对应的对象 @Override public Object getItem(int position) { return null; } //返回position位置对应的id @Override public long getItemId(int position) { return 0; } /** * 获取一个view,用来显示listview的数据,会作为listview的一个条目出现 * convertView:历史缓存对象 */ @Override public View getView(int position, View convertView, ViewGroup parent) { //创建新的view对象 TextView textView= new TextView(MainActivity.this); textView.setText("嘻嘻嘻"+position); return textView; } } } 2、listview的优化 2.1、listview优化的原因:

在使用ListView控件的过程中,由于加载条目过多,在滑动时可能造成卡顿。这是因为ListView在当前屏幕有多少个条目,就会创建多少个对象,每一个条目都是一个对象。在滑动时,滑出屏幕的条目对象会被销毁,新加载到屏幕上的条目会创建新的对象,这样在ListView快速滑动时就会重复一个过程:【创建对象】–>【销毁对象】–>【创建对象】,并且每一个条目都需要加载一次布局,加载布局时会不断进行findViewById()操作初始化控件,而布局XML文件是以树形进行加载,每次加载一个条目都需要从根节点进行初始化,这样对内存消耗也比较大,并且浪费时间。为此就需要对ListView进行优化,优化的目的是在滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。

2.2、优化处理: //将上面的getView方法可以替换为下面的代码进行优化 public View getView(int position, View convertView, ViewGroup parent) { TextView textView; if (convertView==null){ //创建新的view对象 textView = new TextView(MainActivity.this); }else{ //复用历史缓存对象 textView = (TextView) convertView; } textView.setText("嘻嘻嘻嘻"+position); return textView; } 3、listview显示复杂页面(在listview的一个item中显示图片和文字) 在activity_main.xml布局文件中定义listview 定义要显示数据的模板布局文件 定义自己的适配器显示数据 3.1、activity_main.xml文件 3.2、模板item.xml文件 3.3、MainActivity 类 package com.dsl.listview3; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ListView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); lv.setAdapter(new MyAdapter()); } private class MyAdapter extends BaseAdapter{ @Override public int getCount() { return 7; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (convertView==null){ /** * 获取打气筒的事务 * 创建新的view对象,可以通过打气筒把一个布局资源转换成一个view对象 * 第一个参数:上下文 * 第二个参数:定义的布局文件 */ view = View.inflate(getApplication(), R.layout.item, null); }else{ view = convertView; } return view; } } } 4、获取打气筒的常用的api 4.1、第一种 /** * 第一种:获取打气筒的事务 * 创建新的view对象,可以通过打气筒把一个布局资源转换成一个view对象 * 第一个参数:上下文 * 第二个参数:定义的布局文件 * */ View view = View.inflate(getApplication(), R.layout.item, null); 4.2、第二种 View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null); 4.3、第三种 LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.item, null); 5、ArrayAdapter的使用 在activity_main.xml文件定义listview控件 定义模板item.xml文件 通过适配器显示listview 5.1、activity_main.xml文件 5.2、item.xml文件 5.3、MainActivity 文件 package com.dsl.ArrayAdapter; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { String objects[] = {"一","二","三","四","五","六"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); //创建一个arrayadapter ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.tv, objects); //设置数据适配器 lv.setAdapter(adapter); } } 6、SimpleAdapter的使用 6.1、activity_main.xml文件 6.2、MainActivity类 package com.dsl.simpleadapter; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ListView; import android.widget.SimpleAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView) findViewById(R.id.lv); //准备listview要显示的数据 List<Map> data = new ArrayList(); Map map1 = new HashMap(); map1.put("name","鲁智深"); map1.put("phone","132546"); Map map2 = new HashMap(); map2.put("name","林冲"); map2.put("phone","1478"); Map map3 = new HashMap(); map3.put("name","张飞"); map3.put("phone","110"); Map map4 = new HashMap(); map4.put("name","赵云"); map4.put("phone","112"); Map map5 = new HashMap(); map5.put("name","关羽"); map5.put("phone","119"); //把map加入到集合中 data.add(map1); data.add(map2); data.add(map3); data.add(map4); data.add(map5); /** * 第一个参数:上下文 * 第二个:要添加的数据 * 第三个:布局文件 * 第四个:map集合的键 *第五个:布局文件中控件的id */ SimpleAdapter simpleAdapter = new SimpleAdapter(getApplicationContext(), data, R.layout.item, new String[]{"name", "phone",}, new int[]{R.id.tv_name, R.id.tv_phone}); //设置数据适配器 lv.setAdapter(simpleAdapter); } } 7、将数据库中查询出的数据显示到listview中 在布局中添加listview、查询、添加等控件 定义模板文件item.xml 自定义类继承SQLiteOpenHelper实现创建数据库 自定义类继承BaseAdapter实现适配器的操作 写sql语句实现增加和查询 7.1、activity_main.xml文件
需要 登录 后方可回复, 如果你还没有账号请 注册新账号