博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓Android基础第三天——数据库,ListView
阅读量:4322 次
发布时间:2019-06-06

本文共 9764 字,大约阅读时间需要 32 分钟。

  1. 数据库介绍
    sqlite
    问:什么情况下使用数据库?
    答:有大量相似结构的数据需要存储的时候
  2. 数据库的创建
    定义一个类继承SqliteOpenHelper
    context:上下文
    name:数据库名字,如"test.db"
    factory:目的创建cursor对象,游标(默认为null)
    version:数据库版本,>=1
    super(context,name,null,version)
  3. 数据库的onCreate方法和onUpgrade方法
    1. 使用SQLite Expert Profession这个工具可以打开我们创建的数据库
    2. 需要提前安装这个数据库工具
  4. 使用sql语句对数据库进行增删改查
    1. 缺点
      1. Sql语句容易写错
      2. 执行sql语句没有返回值不容易判断
    2. 优点
      1. 容易进行多表查询
  5. 使用谷歌封装好的api对数据进行增删改查
    1. 优点
      1. 写法简单,不需要复杂的sql语句,不易写错
      2. 有返回值,方便开发
    2. 缺点:
      如果有多张表,使用谷歌api不容易进行查询
  6. Android中数据库的事务的介绍
    1. 事务:执行一段逻辑,要么同时成功,要么同时失败。--银行转账的案例
    2. 事务步骤:
      1. db.beginTransition();
      2. db.setTransitionSuccessful();
      3. db.endTransition();
  7. listview
    1. ListView作用:Android系统中显示列表的控件
    2. 每一个ListView都可以包含很多列表项
      ListView的显示与缓存机制
      Recycler是View缓冲池
      需要才显示,显示完被回收到缓存中
    3. 数据适配器
      作用:把复杂的数据(数组,链表,数据库,集合等)填充到指定视图界面上,降低程序耦合性,容易扩展
      1. ArrayAdapter(数组适配器):用于绑定格式单一的数据
        数据源:可以是集合或数组
      2. SimpleAdapter(简单适配器)
        数据源:只能是特定泛型的集合
      3. 数据适配器是数据源和视图界面的桥梁
      4. 实现过程:新建适配器à添加数据源到适配器à视图加载适配器
    4. 监听器
      1. 作用:Android提供了很多事件监听器,监听器主要为了去响应某个动作。
      2. OnItemClickListener:可以处理视图中单个条目的点击事件
      3. OnScrollListener:检测滚动的变化,可以用于视图在滚动中加载数据
      4. 监听器是程序和用户(或系统)交互的桥梁

    下面是数组适配器和简单适配器的用例:

    MainActivity.java:

    1 public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AbsListView.OnScrollListener { 2  3     private ArrayAdapter
    arrayAdapter; 4 private SimpleAdapter simpleAdapter; 5 private ListView listView; 6 private List
    > dataList; 7 8 @Override 9 protected void onCreate(Bundle savedInstanceState) {10 super.onCreate(savedInstanceState);11 setContentView(R.layout.activity_main);12 13 listView = findViewById(R.id.listView);14 /*数组适配器步骤:15 String[] arr_data = {"数据1", "数据2", "数据3", "数据4", "数据5", "数据6", "数据7", "数据8", "数据9", "数据10"};16 //1、新建一个数据适配器17 //ArrayAdapter
    (上下文,当前listView加载的每一个列表项所对应的布局文件,数据源)18 //2、加载数据19 arrayAdapter = new ArrayAdapter
    (getApplicationContext(), R.layout.item, arr_data);20 //3、视图加载适配器21 listView.setAdapter(arrayAdapter);22 */23 24 /**25 *simpleAdapter = new SimpleAdapter(context,data,reaource,from,to);26 *context:上下文27 * data: 数据源(List
    >data) 一个Map所 组成的List集合28 * 每一个Map都会对应ListView列表的一行29 * 每一个Map中的键必须包含所有在from所制定的键30 * resource:列表项布局的ID31 * from:Map中的键名32 * to:绑定数据视图中的ID,与from成对应的关系33 */34 dataList = new ArrayList
    >();35 simpleAdapter = new SimpleAdapter(getApplicationContext(), getData(), R.layout.item, new String[]{"pic", "simpleText"}, new int[]{R.id.pic, R.id.simpleText});36 37 //3、视图加载适配器38 listView.setAdapter(simpleAdapter);39 listView.setOnItemClickListener(this);40 listView.setOnScrollListener(this);41 }42 43 private List
    > getData() {44 for (int i = 0; i < 20; i++) {45 Map
    map = new HashMap
    ();46 map.put("pic", R.drawable.ic_launcher_foreground);47 map.put("simpleText", "lalala" + i);48 dataList.add(map);49 50 }51 52 return dataList;53 }54 55 @Override56 public void onScrollStateChanged(AbsListView view, int scrollState) {57 switch (scrollState) {58 case SCROLL_STATE_FLING:59 Log.i("Main", "用户在手指离开屏幕之前,由于用力滑动了一下,视图仍以靠惯性继续滑动");60 Map
    map = new HashMap
    ();61 map.put("pic",R.drawable.ic_launcher_foreground);62 map.put("simpleText","增加项");63 dataList.add(map);64 simpleAdapter.notifyDataSetChanged();65 break;66 case SCROLL_STATE_IDLE:67 Log.i("Main", "试图以停止滑动");68 break;69 case SCROLL_STATE_TOUCH_SCROLL:70 Log.i("Main", "手指没有离开屏幕,视图正在滑动");71 break;72 73 }74 }75 76 @Override77 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {78 79 }80 81 @Override82 public void onItemClick(AdapterView
    parent, View view, int position, long id) {83 String text = listView.getItemAtPosition(position) + "";84 Toast.makeText(getApplicationContext(), "position:" + position + "tetx:" + text, Toast.LENGTH_SHORT).show();85 }86 }
    View Code

    Activity_main.xml:

    1 
    2
    7 8
    12
    13 14
    View Code

    Item.xml:

    1 
    2
    7
    13
    19 20
    View Code
  • 最通用的数据适配器——BaseAdapter,BaseAdapter基本结构
    1. public int getCount():适配器中数据集中数据的个数
    2. public Object getItem(int position):回去数据集中与指定索引对应的数据项
    3. public long getItemId(int position):回去制定对应的ID
    4. public View getView(int position, View convertView, ViewGroup parent):获取每一个Item的显示内容

    下面是BaseAdapter用例:

    item.xml:

    1 
    2
    5
    9
    17
    25 26
    View Code

    ItemBean.java:

    1 package com.lgqchinese.baseadaptertext; 2  3 public class ItemBean { 4     public int ImageImageResid; 5     public String ItemTitle; 6     public String ItemContent; 7  8     public ItemBean(int imageImageResid, String itemTitle, String itemContent) { 9         ImageImageResid = imageImageResid;10         ItemTitle = itemTitle;11         ItemContent = itemContent;12     }13 }
    View Code

    Myadapter.java:

    1 package com.lgqchinese.baseadaptertext;  2   3 import android.content.Context;  4 import android.view.LayoutInflater;  5 import android.view.View;  6 import android.view.ViewGroup;  7 import android.widget.BaseAdapter;  8 import android.widget.ImageView;  9 import android.widget.TextView; 10  11 import java.util.List; 12  13 public class MyAdapter extends BaseAdapter { 14     private List
    myList; 15 private LayoutInflater myInflater; 16 17 public MyAdapter(Context context, List
    list) { 18 myList = list; 19 //context:要使用当前的Adapter的界面对象 20 //myInflater:布局装载器对象 21 myInflater = LayoutInflater.from(context); 22 } 23 24 @Override 25 //返回ListView需要显示的数据数量 26 public int getCount() { 27 return myList.size(); 28 } 29 30 //返回指定索引对应的数据项 31 @Override 32 public Object getItem(int position) { 33 return myList.get(position); 34 } 35 36 //返回对应的索引项 37 @Override 38 public long getItemId(int position) { 39 return position; 40 } 41 42 //返回每一项的显示内容 43 @Override 44 public View getView(int position, View convertView, ViewGroup parent) { 45 /*请勿模仿!!!!!!!!!!!!!!! 46 //有病,没有考虑缓存机制,造成对资源的极大浪费,效率极其低下 47 View view = myInflater.inflate(R.layout.item,null); 48 ImageView imageView = view.findViewById(R.id.item_image); 49 TextView tv_title = view.findViewById(R.id.item_title); 50 TextView tv_content = view.findViewById(R.id.item_content); 51 ItemBean bean = myList.get(position); 52 imageView.setImageResource(myList.get(position).ImageImageResid); 53 tv_title.setText(bean.ItemTitle); 54 tv_content.setText(bean.ItemContent); 55 return view; 56 !!!!!!!!!!!!!!!!!!!!*/ 57 //普通式,入门 58 /*if (convertView == null) { 59 convertView = myInflater.inflate(R.layout.item, null); 60 } 61 ImageView imageView = convertView.findViewById(R.id.item_image); 62 TextView tv_title = convertView.findViewById(R.id.item_title); 63 TextView tv_content = convertView.findViewById(R.id.item_content); 64 ItemBean bean = myList.get(position); 65 imageView.setImageResource(bean.ImageImageResid); 66 tv_title.setText(bean.ItemTitle); 67 tv_content.setText(bean.ItemContent); 68 return convertView;*/ 69 //普通式 70 71 //优化式 72 73 ViewHolder viewHolder; 74 if (convertView==null){ 75 viewHolder=new ViewHolder(); 76 convertView = myInflater.inflate(R.layout.item, null); 77 viewHolder.imageView=convertView.findViewById(R.id.item_image); 78 viewHolder.tv_title= convertView.findViewById(R.id.item_title); 79 viewHolder.tv_content=convertView.findViewById(R.id.item_content); 80 convertView.setTag(viewHolder); 81 82 83 }else { 84 viewHolder=(ViewHolder) convertView.getTag(); 85 } 86 ItemBean bean = myList.get(position); 87 viewHolder.imageView.setImageResource(bean.ImageImageResid); 88 viewHolder.tv_title.setText(bean.ItemTitle); 89 viewHolder.tv_content.setText(bean.ItemContent); 90 return convertView; 91 92 // 优化式 93 94 } 95 96 class ViewHolder { 97 public ImageView imageView; 98 public TextView tv_title; 99 public TextView tv_content;100 }101 }

    activity_main.xml:

    1 
    2
    8 9
    13 14
    View Code

    MainActivity.java:

    1 package com.lgqchinese.baseadaptertext; 2  3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.widget.ListView; 6  7 import java.util.ArrayList; 8 import java.util.List; 9 10 public class MainActivity extends AppCompatActivity {11 12     @Override13     protected void onCreate(Bundle savedInstanceState) {14         super.onCreate(savedInstanceState);15         setContentView(R.layout.activity_main);16 17         List
    itemBeanList = new ArrayList<>();18 for (int i = 0;i<20;i++){19 itemBeanList.add(new ItemBean(20 R.drawable.ic_launcher_foreground,21 "我是标题"+i,22 "我是内容"+i23 ));24 }25 ListView listView = findViewById(R.id.list_main);26 listView.setAdapter(new MyAdapter(this,itemBeanList));27 }28 }
    View Code

     

      1. ListView显示数据的原理
        mvc:
        1. Javaweb
          m:mode,数据
          v:view视图,用jsp
          c:controller,用servlet
        2. Android
          m:mode数据(javabean)
          v:view,用ListView
          c:adaper
      2. 使用ListView高的时候使用填充父窗体(match…)

 

转载于:https://www.cnblogs.com/lgqrlchinese/p/9920821.html

你可能感兴趣的文章
用存储过程实现获取字符串中的数据添加到列中
查看>>
GZIP压缩传输服务器配置
查看>>
Velocity模版进行shiro验证
查看>>
新生舞会
查看>>
双倍回文(bzoj 2342)
查看>>
微软Coco Blockchain Framework:一键解决企业级区块链三大难题
查看>>
Azure 虚拟机诊断设置问题排查
查看>>
C++入门经典-例4.8-同名的全局变量和局部变量
查看>>
文章阅读报告 -- 自媒体时代的电子阅读
查看>>
python并行编程学习之并行计算存储体系结构
查看>>
Asp.net常用的51个代码(非常实用)
查看>>
深度学习中一些常用函数的偏导数
查看>>
解决离线Could not parse configuration:hibernate.cfg.xml错误
查看>>
关于Win7 x64下过TP保护(应用层)(转)
查看>>
6月7号
查看>>
JS五星级评分效果(类似与淘宝打分效果)
查看>>
JQuery的源码阅读
查看>>
css 背景色半透明 兼容各个浏览器ie6 ie8 火狐
查看>>
Zookeeper 扫盲
查看>>
工作8年的经验之谈
查看>>