Android开发 ---基本UI组件7 :分页功能、适配器、滚动条监听事件
效果图:
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 :分页功能、适配器、滚动条监听事件的更多相关文章
- Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制
Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...
- Android开发 ---基本UI组件3:单选按钮、多选按钮、下拉列表、提交按钮、重置按钮、取消按钮
Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个用户注册按钮 <?xml version="1.0" encoding=&q ...
- Android开发 ---基本UI组件2:图像按钮、单选按钮监听、多选按钮监听、开关
Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个按钮 <?xml version="1.0" encoding=" ...
- Android开发 ---基本UI组件8:九宫格布局、setOnItemClickListener()项被选中监听事件
效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...
- Android开发 ---基本UI组件5:监听下拉选项,动态绑定下拉选项、全选/反选,取多选按钮的值,长按事件,长按删除,适配器的使用,提示查询数据,activity控制多按钮
效果图: 效果描述: 1.当点击 1 按钮后,进入选择城市的页面,会监听到你选中的城市名称:动态为Spinner绑定数据 2.当点击 2 按钮后,进入自动查询数据页面,只要输入首字母,就会动态查找以该 ...
- Android开发 ---基本UI组件6 :只定义一个listView组件,然后通过BaseAdapter适配器根据数据的多少自行添加多个ListView显示数据
效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...
- Android开发---基本UI组件1:自动拨电话,自动上网,输入框不换行、只输数字、只输文本、只输密码
1.activity_main.xml 描述:构建一个按钮 <?xml version="1.0" encoding="utf-8"?> <L ...
- android dialog 原来dialog对话框也有自己的按键监听事件 onKeyDown方法
探讨在一个activity中按menu键时弹出自己定义的dialog(自定义菜单对话框)时,再按一次手机的menu键发现这个自定义的dialog菜单并没有关闭,原来是这个dialog内部也有onKey ...
- Android 给按钮添加监听事件
在安卓开发中,如果要给一个按钮添加监听事件的话,有以下三种实现方式 1.方式一 public class MainActivity extends ActionBarActivity { @Overr ...
随机推荐
- Nginx 多域名配置
nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里.一.每个域名一个文件的写法 ...
- ExecuteNonQuery方法、ExecuteScalar方法、ExecuteReader方法的区别
----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加.删除和更新),那么方法将返回操作所影响的记录条数.- ...
- ANNOTATION 注解
注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是 ...
- Electron把网页打包成桌面应用并进行源码加密
前言 最近想把自己用html+css+js做的网页界面打包成桌面应用,网上一搜,发现Electron是一个不错的选择,试了试,发现效果真的不错.这里记录一下打包过程以作记录,便于自己以后查看学习. 一 ...
- laravel 分页使用
分页 //对数据库结果分页 $users = DB::table('users')->paginate(15); //可以对 Eloquent 模型分页: $allUsers = User::p ...
- YII1 增、删、改、查数据库操作
增 //注意插入的时候 是用的new Post $objectPost = new Post; $objectPost->username = $username; $objectPost-&g ...
- CentOS 6.5安装squashfs-tools
在sourceforge.net网站下载源码包 需要安装的依赖项有zlib-devel.xz-devel.x86_64 修改Makefile文件以支持xz压缩的squashfs文件,去掉Makefil ...
- Container的简单认识
容器是一个标准的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境. Docker容器映像是一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代 ...
- Odd Gnome【枚举】
问题 I: Odd Gnome 时间限制: 1 Sec 内存限制: 128 MB 提交: 234 解决: 144 [提交] [状态] [命题人:admin] 题目描述 According to t ...
- 遗留系统如何用DDD重构(未完,待续)
GETTING DDD STARTED SURROUNDED BY LEGACY SYSTEMS ByEric Evans