本次来说一下ListView控件的情况:

(一)ListView 概念:
ListView是Android中最重要的组件之一,几乎每个Android应用中都会使用ListView。它以垂直列表的方式列出所需的列表项。
java.lang.Object
   ↳ android.view.View
    ↳ android.view.ViewGroup
      ↳ android.widget.AdapterView
        ↳ android.widget.AbsListView
          ↳ android.widget.ListView

(二)ListView的两个职责:
将数据填充到布局:
处理用户的选择点击等操作。
(三)列表的显示需要三个元素:
1.ListVeiw:用来展示列表的View;
2.适配器:用来把数据映射到ListView上的中介;
3.数据源:具体的将被映射的字符串,图片,或者基本组件。
(四)什么是适配器?
适配器是一个连接数据和AdapterView的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。将数据源的数据适配到ListView中的常用适配器有:ArrayAdapter、SimpleAdapter和SimpleCursorAdapter。
ArrayAdapter最为简单,只能展示一行字;
SimpleAdapter有最好的扩充性,可以自定义各种各样的布局,除了文本外,还可以放ImageView(图片)、Button(按钮)、CheckBox(复选框)等等;
BaseAdapter通用数据适配器,可以自定义自己想要的风格,常见的用于比如手机淘宝,美团那种商品界面等;

ArrayAdapter简单实现代码:

package com.xshark.hello.juno6;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private List<String> list = null;private static int i;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init_data();
//        // 系统预置Item风格
//        final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_expandable_list_item_1, list);// 自定义item风格final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, R.layout.item, list);ListView lv1 = (ListView) findViewById(R.id.lv1);lv1.setAdapter(adapter);Button button = (Button) findViewById(R.id.btn_1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {list.add("Button item " + i++);if(i < 10000) {adapter.notifyDataSetChanged();} else {i = 0;}}} );}private void init_data() {list = new ArrayList<String>();for (int i = 0; i < 3; i++) {list.add("item " + i);}}
}

BaseAdapter示例程序:

Good.java
package com.xshark.hello.juno7;public class Good {private int imgId = 0;private String name = null;private int price = 0;private int count = 0;public Good(int imgId, String name, int price) {this.imgId = imgId;this.name = name;this.price = price;this.count = 0;}public int getImgId() {return imgId;}public void setImgId(int imgId) {this.imgId = imgId;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}
}
LayoutActivity.java
package com.xshark.hello.juno7;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.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class LayoutActivity extends AppCompatActivity {private List<Good> goods = new ArrayList<Good>();private GoodAdapter adapter3 = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_layout);initData3();adapter3 = new GoodAdapter();ListView lv3 = (ListView) findViewById(R.id.listview3);lv3.setAdapter(adapter3);}private void initData3() {Good good1 = new Good(R.mipmap.tulips, "衬衫", 100);Good good2 = new Good(R.mipmap.lighthouse, "鞋子", 130);Good good3 = new Good(R.mipmap.penguins, "包包", 200);goods.add(good1);goods.add(good2);goods.add(good3);}private class GoodAdapter extends BaseAdapter {private TextView tv_count = null;@Overridepublic int getCount() {return goods.size();}@Overridepublic Object getItem(int position) {return goods.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(LayoutActivity.this);View view = inflater.inflate(R.layout.item_style4, null);ImageView imageView = (ImageView) view.findViewById(R.id.iv1);TextView tv_name = (TextView) view.findViewById(R.id.tv_name);TextView tv_price = (TextView) view.findViewById(R.id.tv_price);tv_count = (TextView) view.findViewById(R.id.tv_count);Good currentGood = goods.get(position);imageView.setImageResource(currentGood.getImgId());tv_name.setText(currentGood.getName());tv_price.setText("" + currentGood.getPrice());tv_count.setText("" + currentGood.getCount());Button btn_add = (Button) view.findViewById(R.id.btn_add);Button btn_sub = (Button) view.findViewById(R.id.btn_sub);btn_add.setTag(position);btn_sub.setTag(position);tv_count.setTag(position);btn_add.setOnClickListener(new ButtonClick());btn_sub.setOnClickListener(new ButtonClick());return view;}private class ButtonClick implements View.OnClickListener {@Overridepublic void onClick(View v) {int index = (Integer) v.getTag();int count = goods.get(index).getCount();switch (v.getId()) {case R.id.btn_add:if (count <= 100) {goods.get(index).setCount(count + 1);}break;case R.id.btn_sub:if(count > 0) {goods.get(index).setCount(count - 1);} else {goods.remove(index);}break;default:break;}adapter3.notifyDataSetChanged();}}}
}
MainActivity.java
package com.xshark.hello.juno7;import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
import android.support.v4.app.NotificationCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.ToggleButton;import com.xshark.hello.sqlite3.DatabaseHelper;import static android.media.tv.TvContract.EXTRA_CHANNEL_ID;public class MainActivity extends AppCompatActivity {private DatabaseHelper db = null;private SimpleCursorAdapter adapter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1 = (Button) findViewById(R.id.btn_1);Button button2 = (Button) findViewById(R.id.btn_2);Button button3 = (Button) findViewById(R.id.btn_3);button1.setOnClickListener(new ButtonClick());button2.setOnClickListener(new ButtonClick());button3.setOnClickListener(new ButtonClick());final NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);ToggleButton button4 = (ToggleButton) findViewById(R.id.tBtn_4);button4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {final int pushId = 1;final String PRIMARY_CHANNEL = "default";if (isChecked) {NotificationCompat.Builder mBuilder;String senderStr = "hello";String contentStr = "this is a test simple, do you know \"hello\" in chinese is \"你好\" !";//判断是否是8.0Android.Oif (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel chan1 = new NotificationChannel(PRIMARY_CHANNEL,"Primary Channel", NotificationManager.IMPORTANCE_DEFAULT);chan1.setLightColor(Color.GREEN);chan1.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);manager.createNotificationChannel(chan1);mBuilder = new NotificationCompat.Builder(MainActivity.this, PRIMARY_CHANNEL);} else {mBuilder = new NotificationCompat.Builder(MainActivity.this);}Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class);notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  | Intent.FLAG_ACTIVITY_SINGLE_TOP);PendingIntent intent = PendingIntent.getActivity(MainActivity.this, 0,notificationIntent, 0);mBuilder.setContentTitle(senderStr)                 //设置通知栏标题.setContentText(contentStr)                 //设置通知栏内容.setContentIntent(intent)                   //设置通知栏点击意图.setTicker(senderStr + ":" + contentStr)    //通知首次出现在通知栏,带上升动画效果的.setWhen(System.currentTimeMillis())        //通知产生的时间,会在通知信息里显示,一般是系统获取到的时间.setDefaults(Notification.DEFAULT_ALL)     //向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合.setSmallIcon(R.mipmap.ic_launcher);       //设置通知小ICONNotification notify = mBuilder.build();notify.flags |= Notification.FLAG_AUTO_CANCEL;manager.notify(pushId, notify);} else {manager.cancel(pushId);}}});db = new DatabaseHelper(MainActivity.this, "mydb2", null, 1);db.insert("tom", 21);adapter = new SimpleCursorAdapter(this,R.layout.item_style3,db.quary(),new String[]{"_id", "name", "age"},new int[]{R.id.tv_id, R.id.tv_name, R.id.tv_age},CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);ListView listView = (ListView) findViewById(R.id.listview1);listView.setAdapter(adapter);}private class ButtonClick implements View.OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_1:db = new DatabaseHelper(MainActivity.this, "mydb2", null, 1);db.insert("tom", 21);db.insert("bob", 21);adapter.changeCursor(db.quary());break;case R.id.btn_2:Intent intent = new Intent(MainActivity.this, StringActivity.class);startActivity(intent);break;case R.id.btn_3:Intent intent1 = new Intent(MainActivity.this, LayoutActivity.class);startActivity(intent1);break;default:break;}}}
}
StringActivity.java
package com.xshark.hello.juno7;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;import java.util.ArrayList;
import java.util.List;public class StringActivity extends AppCompatActivity {private List<String> data = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_string);initData();StringAdapter adapter = new StringAdapter();ListView listView = (ListView) findViewById(R.id.listview2);listView.setAdapter(adapter);}private void initData() {data = new ArrayList<String>();for (int i = 0; i < 7; i++) {data.add("item " + i);}}private class StringAdapter extends BaseAdapter{@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {TextView tv = new TextView(StringActivity.this);tv.setText(data.get(position));return tv;}}
}
DatabaseHelper.java
package com.xshark.hello.sqlite3;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class DatabaseHelper {private SQLiteDatabase db = null;public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {SQLiteOpenHelper db = new SqliteHelper(context, name, factory, version);this.db = db.getWritableDatabase();}public void insert(String name, int age) {ContentValues values = new ContentValues();values.put("name", name);values.put("age", age);db.insert("persion2", "_id", values);}public void update(String name) {ContentValues values = new ContentValues();values.put("age", 21);values.put("name", "George");db.update("persion2", values, "name = ?", new String[]{name});}public void delete(String name) {db.delete("persion2", "name = ?", new String[]{name});}public Cursor quary() {Cursor cs = db.query("persion2", null, null, null,null, null, null);return cs;}
}
SqliteHelper.java
package com.xshark.hello.sqlite3;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;public class SqliteHelper extends SQLiteOpenHelper {public SqliteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {super(context, name, factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) {String table1 = "create table persion2(_id integer primary key autoincrement," +"name char(20)," +"age integer)";try {db.execSQL(table1);} catch (Exception e) {Log.d("nihao 0417", "无法创建数据库或已存在");}Log.d("nihao 0417", "dbhelper onCreate");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

activity_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".LayoutActivity"><ListViewandroid:id="@+id/listview3"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"tools:context=".MainActivity"><ListViewandroid:id="@+id/listview1"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1" /><LinearLayoutandroid:id="@+id/linerlayout1"android:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn_1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="数据库测试" /><Buttonandroid:id="@+id/btn_2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="跳转页面1" /><Buttonandroid:id="@+id/btn_3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="跳转页面2" /><ToggleButtonandroid:id="@+id/tBtn_4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="状态栏测试" /></LinearLayout></LinearLayout>

activity_string.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".StringActivity"><ListViewandroid:id="@+id/listview2"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>

item_style3.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="match_parent"android:orientation="horizontal"><TextView xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/tv_id"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="TextView" /><TextViewandroid:id="@+id/tv_name"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="TextView" /><TextViewandroid:id="@+id/tv_age"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="TextView" /></LinearLayout>

item_style4.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:padding="5dp"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv1"android:layout_width="55dp"android:layout_height="55dp"app:srcCompat="@mipmap/lighthouse"android:paddingLeft="5dp"/><TextViewandroid:id="@+id/tv_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:layout_alignParentTop="true"android:layout_marginStart="70dp"android:text="name" /><TextViewandroid:id="@+id/tv_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignBottom="@+id/iv1"android:layout_alignStart="@+id/tv_name"android:text="price" /><Buttonandroid:id="@+id/btn_add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentTop="true"android:text="+" /><TextViewandroid:id="@+id/tv_count"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/tv_name"android:layout_toStartOf="@+id/btn_add"android:text="count" /><Buttonandroid:id="@+id/btn_sub"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentTop="true"android:layout_marginEnd="121dp"android:text="-" /></RelativeLayout>

  

(4)Android之路====APK基础入门4(ListView控件)相关推荐

  1. Android开发之Compose基础学习-Divider分割线控件的基本用法

    先上图 再看代码 package com.xiayiye5.composefirst.components/** Copyright (c) 2022, smuyyh@gmail.com All Ri ...

  2. [免费专栏] Android安全之APK逆向入门介绍

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  3. Android快速入门之滚动控件RecyclerView

    之前已经用过了ListView控件,虽然可以实现许多放入功能,但是其扩展性还是有一定缺陷的,比如所无法实现横向布局,为此,Android中提供了一个更强大的滚动控件--RecyclerView,它可以 ...

  4. Android 第十八课 强大的滚动控件 RecyclerView

    步骤: 一.添加依赖库 compile'com.android.support:recyclerview-v7:26.1.0' 二.在activity_mian.xml中,添加RecyclerView ...

  5. android 自定义listview控件,一个简单又完整的自定义ListView

    ListView 一.简单列表 1.在activity_main中添加控件ListView xmlns:tools="http://schemas.android.com/tools&quo ...

  6. Android使用ListView控件问题

    Android使用ListView控件问题: The application has stopped unexpectedly, please try again. 开发环境:android 1.6 ...

  7. android 全选功能,Android实现ListView控件的多选和全选功能实例

    本文实例讲述了Android实现ListView控件的多选和全选功能.分享给大家供大家参考,具体如下: 主程序代码 MainActivity.Java package yy.test; import ...

  8. Android列表ListView控件的使用

    在Android开发中,ListView是比较常用的控件,它以列表的形式显示具体内容,并且能够根据数据的长度自适应显示. 在ListView中可以根据需要显示自定义的列表内容,包括文字(TextVie ...

  9. Android eclipse实现创建水果表并添加信息,将其以ListView控件显示

    Android eclipse实现创建水果表并添加信息,将其以ListView控件显示 整个程序包含:三个.java文件以及两个.xml文件 1.Fruit.java: package com.gpn ...

最新文章

  1. arm汇编学习(二)
  2. 单张图像就可以训练GAN!Adobe改良图像生成方法 | 已开源
  3. WOR文件转换成GST文件
  4. Tomcat 8 安装和配置、优化
  5. SpringBoot环境切换
  6. python nums函数获取结果记录集有多少行记录_python3 数据挖掘之pandas学习记录(一)-----NumPy...
  7. Linux TTY/PTS概述
  8. Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
  9. Q138:PBRT-V3,伪随机数发生器(pseudo-random number generator,RNG)(A.1.2章节)
  10. 第11课:郭盛华课程_VB编程之Timer倒计时控件怎么用
  11. 【附详细材料清单】一种不需要额外加工零件的板球结构(可修改后用于电赛板球结构)
  12. 台式win10怎么开启无线服务器,无线网卡怎么用? win10系统台式机安装无线网卡的详细教程...
  13. 2023年软件设计师中级(考点分析+复习笔记+历年真题+电子版课本)
  14. 企业非法集资风险预测
  15. Windows10开机无限蓝屏(SrtTrail.txt)
  16. 公司服务器中了.Monkey865qqz勒索病毒怎么处理?
  17. 英文操作系统中,cmd显示中文乱码问题
  18. HTML网页基本元素,很简单
  19. 【iOS学习笔记】玩转字符串
  20. Oracle查询语句及运用语句整理

热门文章

  1. 如何让生产计划动态排程?秘诀在于生产排程管理系统
  2. linux crossover中文乱码,wine/crossover字体问题
  3. 《在小吃店遇见凯恩斯》读书心得小记 - Part 2
  4. Docker:小白之路 一plus (拉取镜像加速篇)
  5. 关于加速 pip 安装的两点妙招。
  6. 红米2a android5,小米5和红米2A哪个好? 小米5和红米2A详细区别对比评测
  7. 0812Python总结-网络编程相关知识
  8. Java基础6-文件IO流
  9. react中enter键的使用判断条件
  10. 如何学习摆脱菜鸟头衔