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:

     public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener, AbsListView.OnScrollListener {
    
         private ArrayAdapter<String> arrayAdapter;
    private SimpleAdapter simpleAdapter;
    private ListView listView;
    private List<Map<String, Object>> dataList; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); listView = findViewById(R.id.listView);
    /*数组适配器步骤:
    String[] arr_data = {"数据1", "数据2", "数据3", "数据4", "数据5", "数据6", "数据7", "数据8", "数据9", "数据10"};
    //1、新建一个数据适配器
    //ArrayAdapter<String>(上下文,当前listView加载的每一个列表项所对应的布局文件,数据源)
    //2、加载数据
    arrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.item, arr_data);
    //3、视图加载适配器
    listView.setAdapter(arrayAdapter);
    */ /**
    *simpleAdapter = new SimpleAdapter(context,data,reaource,from,to);
    *context:上下文
    * data: 数据源(List<? extends Map<String,?>>data) 一个Map所 组成的List集合
    * 每一个Map都会对应ListView列表的一行
    * 每一个Map中的键必须包含所有在from所制定的键
    * resource:列表项布局的ID
    * from:Map中的键名
    * to:绑定数据视图中的ID,与from成对应的关系
    */
    dataList = new ArrayList<Map<String, Object>>();
    simpleAdapter = new SimpleAdapter(getApplicationContext(), getData(), R.layout.item, new String[]{"pic", "simpleText"}, new int[]{R.id.pic, R.id.simpleText}); //3、视图加载适配器
    listView.setAdapter(simpleAdapter);
    listView.setOnItemClickListener(this);
    listView.setOnScrollListener(this);
    } private List<Map<String, Object>> getData() {
    for (int i = 0; i < 20; i++) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("pic", R.drawable.ic_launcher_foreground);
    map.put("simpleText", "lalala" + i);
    dataList.add(map); } return dataList;
    } @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
    switch (scrollState) {
    case SCROLL_STATE_FLING:
    Log.i("Main", "用户在手指离开屏幕之前,由于用力滑动了一下,视图仍以靠惯性继续滑动");
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("pic",R.drawable.ic_launcher_foreground);
    map.put("simpleText","增加项");
    dataList.add(map);
    simpleAdapter.notifyDataSetChanged();
    break;
    case SCROLL_STATE_IDLE:
    Log.i("Main", "试图以停止滑动");
    break;
    case SCROLL_STATE_TOUCH_SCROLL:
    Log.i("Main", "手指没有离开屏幕,视图正在滑动");
    break; }
    } @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    String text = listView.getItemAtPosition(position) + "";
    Toast.makeText(getApplicationContext(), "position:" + position + "tetx:" + text, Toast.LENGTH_SHORT).show();
    }
    }

    Activity_main.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"> <ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    </ListView> </android.support.constraint.ConstraintLayout>

    Item.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <ImageView
    android:id="@+id/pic"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="15dp"
    android:src="@drawable/ic_launcher_foreground"/>
    <TextView
    android:id="@+id/simpleText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:text="demo"/> </LinearLayout>
  • 最通用的数据适配器——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:

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
    android:id="@+id/item_image"
    android:layout_width="60dp"
    android:layout_height="60dp" />
    <TextView
    android:id="@+id/item_title"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_toEndOf="@+id/item_image"
    android:text="Title"
    android:gravity="center"
    android:textSize="25sp"/>
    <TextView
    android:id="@+id/item_content"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_toEndOf="@+id/item_image"
    android:text="Content"
    android:gravity="center_vertical"
    android:textSize="25sp"/> </RelativeLayout>

    ItemBean.java:

     package com.lgqchinese.baseadaptertext;
    
     public class ItemBean {
    public int ImageImageResid;
    public String ItemTitle;
    public String ItemContent; public ItemBean(int imageImageResid, String itemTitle, String itemContent) {
    ImageImageResid = imageImageResid;
    ItemTitle = itemTitle;
    ItemContent = itemContent;
    }
    }

    Myadapter.java:

     package com.lgqchinese.baseadaptertext;
    
     import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView; import java.util.List; public class MyAdapter extends BaseAdapter {
    private List<ItemBean> myList;
    private LayoutInflater myInflater; public MyAdapter(Context context, List<ItemBean> list) {
    myList = list;
    //context:要使用当前的Adapter的界面对象
    //myInflater:布局装载器对象
    myInflater = LayoutInflater.from(context);
    } @Override
    //返回ListView需要显示的数据数量
    public int getCount() {
    return myList.size();
    } //返回指定索引对应的数据项
    @Override
    public Object getItem(int position) {
    return myList.get(position);
    } //返回对应的索引项
    @Override
    public long getItemId(int position) {
    return position;
    } //返回每一项的显示内容
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    /*请勿模仿!!!!!!!!!!!!!!!
    //有病,没有考虑缓存机制,造成对资源的极大浪费,效率极其低下
    View view = myInflater.inflate(R.layout.item,null);
    ImageView imageView = view.findViewById(R.id.item_image);
    TextView tv_title = view.findViewById(R.id.item_title);
    TextView tv_content = view.findViewById(R.id.item_content);
    ItemBean bean = myList.get(position);
    imageView.setImageResource(myList.get(position).ImageImageResid);
    tv_title.setText(bean.ItemTitle);
    tv_content.setText(bean.ItemContent);
    return view;
    !!!!!!!!!!!!!!!!!!!!*/
    //普通式,入门
    /*if (convertView == null) {
    convertView = myInflater.inflate(R.layout.item, null);
    }
    ImageView imageView = convertView.findViewById(R.id.item_image);
    TextView tv_title = convertView.findViewById(R.id.item_title);
    TextView tv_content = convertView.findViewById(R.id.item_content);
    ItemBean bean = myList.get(position);
    imageView.setImageResource(bean.ImageImageResid);
    tv_title.setText(bean.ItemTitle);
    tv_content.setText(bean.ItemContent);
    return convertView;*/
    //普通式 //优化式 ViewHolder viewHolder;
    if (convertView==null){
    viewHolder=new ViewHolder();
    convertView = myInflater.inflate(R.layout.item, null);
    viewHolder.imageView=convertView.findViewById(R.id.item_image);
    viewHolder.tv_title= convertView.findViewById(R.id.item_title);
    viewHolder.tv_content=convertView.findViewById(R.id.item_content);
    convertView.setTag(viewHolder); }else {
    viewHolder=(ViewHolder) convertView.getTag();
    }
    ItemBean bean = myList.get(position);
    viewHolder.imageView.setImageResource(bean.ImageImageResid);
    viewHolder.tv_title.setText(bean.ItemTitle);
    viewHolder.tv_content.setText(bean.ItemContent);
    return convertView; // 优化式 } class ViewHolder {
    public ImageView imageView;
    public TextView tv_title;
    public TextView tv_content;
    }
    }

    activity_main.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"> <ListView
    android:id="@+id/list_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></ListView> </android.support.constraint.ConstraintLayout>

    MainActivity.java:

     package com.lgqchinese.baseadaptertext;
    
     import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ListView; import java.util.ArrayList;
    import java.util.List; public class MainActivity extends AppCompatActivity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); List<ItemBean> itemBeanList = new ArrayList<>();
    for (int i = 0;i<20;i++){
    itemBeanList.add(new ItemBean(
    R.drawable.ic_launcher_foreground,
    "我是标题"+i,
    "我是内容"+i
    ));
    }
    ListView listView = findViewById(R.id.list_main);
    listView.setAdapter(new MyAdapter(this,itemBeanList));
    }
    }
      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…)

最新文章

  1. 开个帖,开始学习shell编程
  2. Jquery 操作IFrame
  3. 【转】DPM--对象检测开山之作
  4. Codeforces #256 Div.2
  5. Gentoo 网络接口配置文件说明
  6. Apache开启伪静态后报500错误.
  7. 关于Android(Java)创建匿名线程
  8. 正则取页面图片URL和TABLE BackGround
  9. Ubuntu12.04 cuda5.5安装
  10. Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介
  11. C#设计模式(2)-简单工厂模式
  12. ExecutorService的submit方法使用
  13. 页面js脚本与img等资源的下载顺序问题。
  14. Writing Sentences [1]
  15. tensorflow 只恢复部分模型参数
  16. 使用PHP对二维索引数组进行排序
  17. jquery 在线视频
  18. C语言--pow()函数实现
  19. python的类和实例化对象
  20. [WC2008]游览计划 「斯坦那树模板」

热门文章

  1. Javascript 小练习
  2. RabbitMQ总结
  3. 【RSYSLOG】The Property Replacer【转】
  4. Largest Rectangle in a Histogram HDU - 1506 (单调栈)
  5. centos6 yum 安装memcached
  6. nginx强制使用https访问(http跳转到https)
  7. 墨者学院——密码学加解密实训(Base64转义)
  8. IdentityServer4【QuickStart】之使用ClientCredentials流程保护API
  9. RedHat Enterprise Linux 6.4使用yum安装出现This system is not registered to Red Hat Subscription Management
  10. java回调机制——基本理解