效果图:

  

1、activity_main.xml

  描述:

    定义了一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="ListView_2"
android:onClick="test_2"/>
</LinearLayout>

2、MainActivity.java

   描述:

     进行了页面跳转

package com.example.android_ui_3;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}public void test_2(View view){
Intent intent=new Intent(this,ListView_2Activity.class);
startActivity(intent);
}
}

3、activity_list_view_2.xml

  描述:

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_list_view__base_adapter"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:id="@+id/listView_1"
android:listSelector="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <ProgressBar
android:id="@+id/pb"
android:background="@android:color/holo_green_dark"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="60dp"
android:visibility="invisible"
/>
</RelativeLayout>

4、ListView_2Activity.java

package com.example.android_ui_3;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class ListView_2Activity extends Activity {   //获取listView
private ListView listView_1;
  //声明一个list集合
private List<Map<String,Object>> list;
  //声明一个适配器
private MyBaseAdapter adapter;
private boolean isBottom=false;//是不是到底底部
  //获取进度条
private ProgressBar pb;
private int cpage=1;//当前默认第一页
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_2);
listView_1=(ListView)findViewById(R.id.listView_1);
pb=(ProgressBar)findViewById(R.id.pb);
//获取数据源
loadData();
     //实例化适配器,将list数据传入到适配器中
adapter=new MyBaseAdapter(list,this);
     //给listView控件中绑定适配器
listView_1.setAdapter(adapter); //为ListView添加滚动事件监控
listView_1.setOnScrollListener(new AbsListView.OnScrollListener() {
//当滚动状态发生改变的时候
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
          //scrollState有三种状态,分别是开始滚动(SCROLL_STATE_FLING),正在滚动(SCROLL_STATE_TOUCH_SCROLL), 已经停止(SCROLL_STATE_IDLE)
if(i==SCROLL_STATE_IDLE){//停止滚动
Toast.makeText(ListView_2Activity.this,"停止滚动了",Toast.LENGTH_SHORT).show();
}
if(i==SCROLL_STATE_IDLE&&isBottom){//停止滚动并且到底了,加载下一页
Toast.makeText(ListView_2Activity.this,"到底部了",Toast.LENGTH_SHORT).show();
            //到底部了之后,如果你再往上拉,那么这个圆圈式的进度条将会变得可见
            //View.VISIBLE View可见;View.INVISIBLE View不可以见,但仍然占据可见时的大小和位置;View.GONE View不可见,且不占据空间。
                    pb.setVisibility(View.VISIBLE);
            //通过线程来控制进度条
new Thread(new Runnable() {
@Override
public void run() {
                 //休眠2秒
SystemClock.sleep(2000);
                 
runOnUiThread(new Runnable() {
@Override
public void run() {
                      //进度条不可见
pb.setVisibility(View.INVISIBLE);
                      //继续加载下一页
cpage++;//下一页
                      //循换出数据
                      //因为一页是显示10个数据,所以第二页是从(cpage-1)*10+1开始
for(int i=(cpage-1)*10+1;i<=cpage*10;i++){
Map<String,Object> map=new HashMap<String,Object>();
map.put("userImage",R.mipmap.ic_launcher);
map.put("userName","小明"+i);
map.put("userInfo","这是第"+i+"个小明");
list.add(map);
}
                     //刷新UI
adapter.notifyDataSetChanged();
}
});
}
}).start();
}
} /**
* 滚动中
* @param absListView
* @param i 起点
* @param i1 滚动了多少项数
* @param i2 总项数
*/
@Override
public void onScroll(AbsListView absListView, int i, int i1, int i2) {
if(i+i1==i2){
isBottom=true;
}else{
isBottom=false;
}
}
});
}
//构建数据源
private void loadData(){
list=new ArrayList<Map<String,Object>>();
for(int i=1;i<=10;i++){
Map<String,Object> map=new HashMap<String,Object>();
map.put("userImage",R.mipmap.ic_launcher);
map.put("userName","小明"+i);
map.put("userInfo","这是第"+i+"个小明");
list.add(map);
}
} //构建一个适配器内部类
class MyBaseAdapter extends BaseAdapter {
//接收将要绑定给UI的数据源
private List<Map<String,Object>> list;
//数据绑定给谁
private Context context; //构造方法
MyBaseAdapter(List<Map<String,Object>> list,Context context){
this.list=list;
this.context=context;
} @Override
public int getCount() {
if(list!=null)
return list.size();
return 0;
}
@Override
public Object getItem(int i) {
if(list!=null)
return list.get(i);
return null;
}
@Override
public long getItemId(int i) {
if(list!=null)
return i;
return 0;
} /**
* 构建每一个Item,多次调用,每次构建一项
* @param i 当前第几项
* @param view 被回收的Item
* @param viewGroup
* @return
*/
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
if(list!=null){
Log.i("create view","创建第"+i+"项");
UserItem userItem;
if(view==null){
Log.i("create view","第"+i+"次加载View");
userItem=new UserItem();
//获取要绑定数据的UI[UI描绘在XML文件中,需要将XML解析成一个View对象]
view=View.inflate(context,R.layout.layout_userlist,null);
userItem.userImage=(ImageView)view.findViewById(R.id.userImage);
userItem.userName=(TextView)view.findViewById(R.id.userName);
userItem.userInfo=(TextView)view.findViewById(R.id.userInfo);
userItem.delete=(TextView)view.findViewById(R.id.deleteText);
view.setTag(userItem);
}else{
userItem=(UserItem)view.getTag();
}
//为UI绑定数据
final Map<String,Object> map=list.get(i);
userItem.userImage.setImageResource((Integer) map.get("userImage"));
userItem.userName.setText(map.get("userName").toString());
userItem.userInfo.setText(map.get("userInfo").toString());
//为UI绑定事件
userItem.delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(context,"将要删除:"+map.get("userName").toString(),Toast.LENGTH_SHORT).show();
list.remove(i);
adapter.notifyDataSetChanged();
}
});
return view;
}
return null;
}
}
final class UserItem{
ImageView userImage;
TextView userName,userInfo,delete;
}
}

5、ListView_2Activity.java

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/userImage"
android:layout_width="60dp"
android:layout_height="70dp" />
<LinearLayout
android:orientation="horizontal"
android:layout_marginLeft="3dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_weight="5"
android:layout_width="0dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/userName"
android:textSize="28sp"
android:layout_width="match_parent"
android:layout_height="40dp" />
<TextView
android:id="@+id/userInfo"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="30dp" />
</LinearLayout>
<TextView
android:id="@+id/deleteText"
android:textSize="25sp"
android:gravity="center_horizontal|bottom"
android:text="删除"
android:layout_weight="1"
android:layout_gravity="right"
android:layout_width="0dp"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</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. List查询重复值的个数,并根据重复的数目从多到少排列

    package ttt; import java.nio.MappedByteBuffer; import java.util.ArrayList; import java.util.Collecti ...

  2. Python 函数中,参数是传值,还是传引用?

    在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...

  3. javascript DOM 常用方法

    前端HTML+CSS+JS流程导图:https://www.processon.com/view/link/5ad1c2d0e4b0b74a6dd64f3c HTML+CSS+Javascript+j ...

  4. 微信小程序上传与下载文件

    需要准备的工作: ①.建立微信小程序工程,编写以下代码. ②.通过IDE建立springboot+web工程,编写接收文件以及提供下载文件的方式,并将上传的文件相关信息记录在mysql数据库中.具体请 ...

  5. LinkedList 利用的是尾插法

  6. Codeforces 333E Summer Earnings - bitset

    题目传送门 传送门I 传送门II 传送门III 题目大意 给定平面上的$n$个点,以三个不同点为圆心画圆,使得圆两两没有公共部分(相切不算),问最大的半径. 显然答案是三点间任意两点之间的距离的最小值 ...

  7. Guitar Pro里自动化编辑器有什么用?如何使用?

    我们在使用操作Guitar Pro来进行吉他学习创作时,会遇到下面几个问题.当我们想要改变全部小节或者某一特定小节的拍速时,就会在想,有没有什么简便工具来实现我们的想法呢?告诉大家,Guitar Pr ...

  8. BZOJ 4480 [JSOI2013] 快乐的jyy

    思路 两个字符串都插入回文自动机中(每次重置last) 最后统计两个right集合的大小就好了 代码 #include <cstdio> #include <algorithm> ...

  9. 想做AI测试,需要学习哪些数学知识?

    摘自知乎的回答 作者:者也 以上是个人读研以来感受用得最多的数学基础课,挂一漏万,大侠请补充指正 高等数学是基础中的基础,研究生以上级别的一切理工科都需要这个打底,数据挖掘.人工智能.模式识别此类跟数 ...

  10. RabbitMQ(3) Spring boot集成RabbitMQ

    springboot集成RabbitMQ非常简单,如果只是简单的使用配置非常少,springboot提供了spring-boot-starter-amqp项目对消息各种支持. 资源代码:练习用的代码. ...