效果图:

  

1、activity_main.xml

  描述:

    定义了一个按钮

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/activity_main"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical">
  7. <Button
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:text="ListView_2"
  11. android:onClick="test_2"/>
  12. </LinearLayout>

2、MainActivity.java

   描述:

     进行了页面跳转

  1. package com.example.android_ui_3;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6.  
  7. public class MainActivity extends Activity {
  8.  
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. }public void test_2(View view){
  14. Intent intent=new Intent(this,ListView_2Activity.class);
  15. startActivity(intent);
  16. }
  17. }

3、activity_list_view_2.xml

  描述:

    定义了一个ListView 和一个圆圈式进度条

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/activity_list_view__base_adapter"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6.  
  7. <ListView
  8. android:id="@+id/listView_1"
  9. android:listSelector="@color/colorAccent"
  10. android:layout_width="match_parent"
  11. android:layout_height="match_parent"/>
  12.  
  13. <ProgressBar
  14. android:id="@+id/pb"
  15. android:background="@android:color/holo_green_dark"
  16. android:layout_alignParentBottom="true"
  17. android:layout_width="match_parent"
  18. android:layout_height="60dp"
  19. android:visibility="invisible"
  20. />
  21. </RelativeLayout>

4、ListView_2Activity.java

  1. package com.example.android_ui_3;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.os.SystemClock;
  6. import android.util.Log;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.AbsListView;
  10. import android.widget.BaseAdapter;
  11. import android.widget.ImageView;
  12. import android.widget.ListView;
  13. import android.widget.ProgressBar;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16.  
  17. import java.util.ArrayList;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21.  
  22. public class ListView_2Activity extends Activity {
  23.  
  24.   //获取listView
  25. private ListView listView_1;
      //声明一个list集合
  26. private List<Map<String,Object>> list;
      //声明一个适配器
  27. private MyBaseAdapter adapter;
  28. private boolean isBottom=false;//是不是到底底部
      //获取进度条
  29. private ProgressBar pb;
  30. private int cpage=1;//当前默认第一页
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. setContentView(R.layout.activity_list_view_2);
  35. listView_1=(ListView)findViewById(R.id.listView_1);
  36. pb=(ProgressBar)findViewById(R.id.pb);
  37. //获取数据源
  38. loadData();
         //实例化适配器,将list数据传入到适配器中
  39. adapter=new MyBaseAdapter(list,this);
         //给listView控件中绑定适配器
  40. listView_1.setAdapter(adapter);
  41.  
  42. //为ListView添加滚动事件监控
  43. listView_1.setOnScrollListener(new AbsListView.OnScrollListener() {
  44. //当滚动状态发生改变的时候
  45. @Override
  46. public void onScrollStateChanged(AbsListView absListView, int i) {
              //scrollState有三种状态,分别是开始滚动(SCROLL_STATE_FLING),正在滚动(SCROLL_STATE_TOUCH_SCROLL), 已经停止(SCROLL_STATE_IDLE)
  47. if(i==SCROLL_STATE_IDLE){//停止滚动
  48. Toast.makeText(ListView_2Activity.this,"停止滚动了",Toast.LENGTH_SHORT).show();
  49. }
  50. if(i==SCROLL_STATE_IDLE&&isBottom){//停止滚动并且到底了,加载下一页
  51. Toast.makeText(ListView_2Activity.this,"到底部了",Toast.LENGTH_SHORT).show();
                //到底部了之后,如果你再往上拉,那么这个圆圈式的进度条将会变得可见
                //View.VISIBLE View可见;View.INVISIBLE View不可以见,但仍然占据可见时的大小和位置;View.GONE View不可见,且不占据空间。
  1. pb.setVisibility(View.VISIBLE);
                //通过线程来控制进度条
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
                     //休眠2秒
  5. SystemClock.sleep(2000);
                     
  6. runOnUiThread(new Runnable() {
  7. @Override
  8. public void run() {
                          //进度条不可见
  9. pb.setVisibility(View.INVISIBLE);
                          //继续加载下一页
  10. cpage++;//下一页
                          //循换出数据
                          //因为一页是显示10个数据,所以第二页是从(cpage-1)*10+1开始
  11. for(int i=(cpage-1)*10+1;i<=cpage*10;i++){
  12. Map<String,Object> map=new HashMap<String,Object>();
  13. map.put("userImage",R.mipmap.ic_launcher);
  14. map.put("userName","小明"+i);
  15. map.put("userInfo","这是第"+i+"个小明");
  16. list.add(map);
  17. }
                         //刷新UI
  18. adapter.notifyDataSetChanged();
  19. }
  20. });
  21. }
  22. }).start();
  23. }
  24. }
  25.  
  26. /**
  27. * 滚动中
  28. * @param absListView
  29. * @param i 起点
  30. * @param i1 滚动了多少项数
  31. * @param i2 总项数
  32. */
  33. @Override
  34. public void onScroll(AbsListView absListView, int i, int i1, int i2) {
  35. if(i+i1==i2){
  36. isBottom=true;
  37. }else{
  38. isBottom=false;
  39. }
  40. }
  41. });
  42. }
  43. //构建数据源
  44. private void loadData(){
  45. list=new ArrayList<Map<String,Object>>();
  46. for(int i=1;i<=10;i++){
  47. Map<String,Object> map=new HashMap<String,Object>();
  48. map.put("userImage",R.mipmap.ic_launcher);
  49. map.put("userName","小明"+i);
  50. map.put("userInfo","这是第"+i+"个小明");
  51. list.add(map);
  52. }
  53. }
  54.  
  55. //构建一个适配器内部类
  56. class MyBaseAdapter extends BaseAdapter {
  57. //接收将要绑定给UI的数据源
  58. private List<Map<String,Object>> list;
  59. //数据绑定给谁
  60. private Context context;
  61.  
  62. //构造方法
  63. MyBaseAdapter(List<Map<String,Object>> list,Context context){
  64. this.list=list;
  65. this.context=context;
  66. }
  67.  
  68. @Override
  69. public int getCount() {
  70. if(list!=null)
  71. return list.size();
  72. return 0;
  73. }
  74. @Override
  75. public Object getItem(int i) {
  76. if(list!=null)
  77. return list.get(i);
  78. return null;
  79. }
  80. @Override
  81. public long getItemId(int i) {
  82. if(list!=null)
  83. return i;
  84. return 0;
  85. }
  86.  
  87. /**
  88. * 构建每一个Item,多次调用,每次构建一项
  89. * @param i 当前第几项
  90. * @param view 被回收的Item
  91. * @param viewGroup
  92. * @return
  93. */
  94. @Override
  95. public View getView(final int i, View view, ViewGroup viewGroup) {
  96. if(list!=null){
  97. Log.i("create view","创建第"+i+"项");
  98. UserItem userItem;
  99. if(view==null){
  100. Log.i("create view","第"+i+"次加载View");
  101. userItem=new UserItem();
  102. //获取要绑定数据的UI[UI描绘在XML文件中,需要将XML解析成一个View对象]
  103. view=View.inflate(context,R.layout.layout_userlist,null);
  104. userItem.userImage=(ImageView)view.findViewById(R.id.userImage);
  105. userItem.userName=(TextView)view.findViewById(R.id.userName);
  106. userItem.userInfo=(TextView)view.findViewById(R.id.userInfo);
  107. userItem.delete=(TextView)view.findViewById(R.id.deleteText);
  108. view.setTag(userItem);
  109. }else{
  110. userItem=(UserItem)view.getTag();
  111. }
  112. //为UI绑定数据
  113. final Map<String,Object> map=list.get(i);
  114. userItem.userImage.setImageResource((Integer) map.get("userImage"));
  115. userItem.userName.setText(map.get("userName").toString());
  116. userItem.userInfo.setText(map.get("userInfo").toString());
  117. //为UI绑定事件
  118. userItem.delete.setOnClickListener(new View.OnClickListener() {
  119. @Override
  120. public void onClick(View view) {
  121. //Toast.makeText(context,"将要删除:"+map.get("userName").toString(),Toast.LENGTH_SHORT).show();
  122. list.remove(i);
  123. adapter.notifyDataSetChanged();
  124. }
  125. });
  126. return view;
  127. }
  128. return null;
  129. }
  130. }
  131. final class UserItem{
  132. ImageView userImage;
  133. TextView userName,userInfo,delete;
  134. }
  135. }

5、ListView_2Activity.java

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:layout_marginLeft="5dp"
  7. >
  8. <LinearLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="70dp"
  11. android:orientation="horizontal">
  12. <ImageView
  13. android:id="@+id/userImage"
  14. android:layout_width="60dp"
  15. android:layout_height="70dp" />
  16. <LinearLayout
  17. android:orientation="horizontal"
  18. android:layout_marginLeft="3dp"
  19. android:layout_width="match_parent"
  20. android:layout_height="match_parent">
  21. <LinearLayout
  22. android:orientation="vertical"
  23. android:layout_weight="5"
  24. android:layout_width="0dp"
  25. android:layout_height="match_parent">
  26. <TextView
  27. android:id="@+id/userName"
  28. android:textSize="28sp"
  29. android:layout_width="match_parent"
  30. android:layout_height="40dp" />
  31. <TextView
  32. android:id="@+id/userInfo"
  33. android:textSize="20sp"
  34. android:layout_width="match_parent"
  35. android:layout_height="30dp" />
  36. </LinearLayout>
  37. <TextView
  38. android:id="@+id/deleteText"
  39. android:textSize="25sp"
  40. android:gravity="center_horizontal|bottom"
  41. android:text="删除"
  42. android:layout_weight="1"
  43. android:layout_gravity="right"
  44. android:layout_width="0dp"
  45. android:layout_height="match_parent" />
  46. </LinearLayout>
  47. </LinearLayout>
  48. </LinearLayout>

Android开发 ---基本UI组件7 :分页功能、适配器、滚动条监听事件的更多相关文章

  1. Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制

    Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...

  2. Android开发 ---基本UI组件3:单选按钮、多选按钮、下拉列表、提交按钮、重置按钮、取消按钮

    Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个用户注册按钮 <?xml version="1.0" encoding=&q ...

  3. Android开发 ---基本UI组件2:图像按钮、单选按钮监听、多选按钮监听、开关

    Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个按钮 <?xml version="1.0" encoding=" ...

  4. Android开发 ---基本UI组件8:九宫格布局、setOnItemClickListener()项被选中监听事件

    效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...

  5. Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮

    效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...

  6. Android开发 ---基本UI组件6 :只定义一个listView组件,然后通过BaseAdapter适配器根据数据的多少自行添加多个ListView显示数据

    效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...

  7. Android开发---基本UI组件1:自动拨电话,自动上网,输入框不换行、只输数字、只输文本、只输密码

    1.activity_main.xml 描述:构建一个按钮 <?xml version="1.0" encoding="utf-8"?> <L ...

  8. android dialog 原来dialog对话框也有自己的按键监听事件 onKeyDown方法

    探讨在一个activity中按menu键时弹出自己定义的dialog(自定义菜单对话框)时,再按一次手机的menu键发现这个自定义的dialog菜单并没有关闭,原来是这个dialog内部也有onKey ...

  9. Android 给按钮添加监听事件

    在安卓开发中,如果要给一个按钮添加监听事件的话,有以下三种实现方式 1.方式一 public class MainActivity extends ActionBarActivity { @Overr ...

随机推荐

  1. Nginx 多域名配置

    nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里.一.每个域名一个文件的写法  ...

  2. ExecuteNonQuery方法、ExecuteScalar方法、ExecuteReader方法的区别

    ----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加.删除和更新),那么方法将返回操作所影响的记录条数.- ...

  3. ANNOTATION 注解

    注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是 ...

  4. Electron把网页打包成桌面应用并进行源码加密

    前言 最近想把自己用html+css+js做的网页界面打包成桌面应用,网上一搜,发现Electron是一个不错的选择,试了试,发现效果真的不错.这里记录一下打包过程以作记录,便于自己以后查看学习. 一 ...

  5. laravel 分页使用

    分页 //对数据库结果分页 $users = DB::table('users')->paginate(15); //可以对 Eloquent 模型分页: $allUsers = User::p ...

  6. YII1 增、删、改、查数据库操作

    增 //注意插入的时候 是用的new Post $objectPost = new Post; $objectPost->username = $username; $objectPost-&g ...

  7. CentOS 6.5安装squashfs-tools

    在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...

  8. Container的简单认识

    容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境. Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代 ...

  9. Odd Gnome【枚举】

    问题 I: Odd Gnome 时间限制: 1 Sec  内存限制: 128 MB 提交: 234  解决: 144 [提交] [状态] [命题人:admin] 题目描述 According to t ...

  10. 遗留系统如何用DDD重构(未完,待续)

    GETTING DDD STARTED SURROUNDED BY LEGACY SYSTEMS ByEric Evans