通常这也分为两种方式,一种是设置一个按钮,用户点击即加载。另一种是当用户滑动到底部时自动加载。今天我就和大家分享一下这个功能的实现。
首先,写一个xml文件,moredata.xml,该文件即定义了放在listview底部的视图:
<?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="vertical" >
<Button
android:id="@+id/bt_load"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="加载更多数据" />
<ProgressBar
android:id="@+id/pg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:visibility="gone"
/>
</LinearLayout>
可以看到是一个按钮和一个进度条。因为只做一个演示,这里简单处理,通过设置控件的visibility,未加载时显示按钮,加载时就显示进度条。
写一个item.xml,大家应该很熟悉了。用来定义listview的每个item的视图。
<?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="vertical" >
<TextView
android:id="@+id/tv_title"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
/>
<TextView
android:textSize="12sp"
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
/>
</LinearLayout>
main.xml就不贴了,整个主界面就一个listview。
直接先看下Activity的代码,在里面实现分页效果。
package com.notice.moredate
import java.util.ArrayList
import java.util.HashMap
import android.app.Activity
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.view.View.OnClickListener
import android.widget.AbsListView
import android.widget.AbsListView.OnScrollListener
import android.widget.Button
import android.widget.ListView
import android.widget.ProgressBar
import android.widget.SimpleAdapter
import android.widget.Toast
public class MoreDateListActivity extends Activity implements OnScrollListener {
// ListView的Adapter
private SimpleAdapter mSimpleAdapter
private ListView lv
private Button bt
private ProgressBar pg
private ArrayList<HashMap<String,String>>list
// ListView底部View
private View moreView
private Handler handler
// 设置一个最大的数据条数,超过即不再加载
private int MaxDateNum
// 最后可见条目的索引
private int lastVisibleIndex
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
MaxDateNum = 22// 设置最大数据条数
lv = (ListView) findViewById(R.id.lv)
// 实例化底部布局
moreView = getLayoutInflater().inflate(R.layout.moredate, null)
bt = (Button) moreView.findViewById(R.id.bt_load)
pg = (ProgressBar) moreView.findViewById(R.id.pg)
handler = new Handler()
// 用map来装载数据,初始化10条数据
list = new ArrayList<HashMap<String,String>>()
for (int i = 0i <10i++) {
HashMap<String, String>map = new HashMap<String, String>()
map.put("ItemTitle", "第" + i + "行标题")
map.put("ItemText", "第" + i + "行内容")
list.add(map)
}
// 实例化SimpleAdapter
mSimpleAdapter = new SimpleAdapter(this, list, R.layout.item,
new String[] { "ItemTitle", "ItemText" },
new int[] { R.id.tv_title, R.id.tv_content })
// 加上底部View,注意要放在setAdapter方法前
lv.addFooterView(moreView)
lv.setAdapter(mSimpleAdapter)
// 绑定监听器
lv.setOnScrollListener(this)
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
pg.setVisibility(View.VISIBLE)// 将进度条可见
bt.setVisibility(View.GONE)// 按钮不可见
handler.postDelayed(new Runnable() {
@Override
public void run() {
loadMoreDate()// 加载更多数据
bt.setVisibility(View.VISIBLE)
pg.setVisibility(View.GONE)
mSimpleAdapter.notifyDataSetChanged()// 通知listView刷新数据
}
}, 2000)
}
})
}
private void loadMoreDate() {
int count = mSimpleAdapter.getCount()
if (count + 5 <MaxDateNum) {
// 每次加载5条
for (int i = counti <count + 5i++) {
HashMap<String, String>map = new HashMap<String, String>()
map.put("ItemTitle", "新增第" + i + "行标题")
map.put("ItemText", "新增第" + i + "行内容")
list.add(map)
}
} else {
// 数据已经不足5条
for (int i = counti <MaxDateNumi++) {
HashMap<String, String>map = new HashMap<String, String>()
map.put("ItemTitle", "新增第" + i + "行标题")
map.put("ItemText", "新增第" + i + "行内容")
list.add(map)
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// 计算最后可见条目的索引
lastVisibleIndex = firstVisibleItem + visibleItemCount - 1
// 所有的条目已经和最大条数相等,则移除底部的View
if (totalItemCount == MaxDateNum + 1) {
lv.removeFooterView(moreView)
Toast.makeText(this, "数据全部加载完成,没有更多数据!", Toast.LENGTH_LONG).show()
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// 滑到底部后自动加载,判断listview已经停止滚动并且最后可视的条目等于adapter的条目
if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
&&lastVisibleIndex == mSimpleAdapter.getCount()) {
// 当滑到底部时自动加载
// pg.setVisibility(View.VISIBLE)
// bt.setVisibility(View.GONE)
// handler.postDelayed(new Runnable() {
//
// @Override
// public void run() {
// loadMoreDate()
// bt.setVisibility(View.VISIBLE)
// pg.setVisibility(View.GONE)
// mSimpleAdapter.notifyDataSetChanged()
// }
//
// }, 2000)
}
}
}
asp.net listview分页问题。
总结了以下几种分列显示二维数组的方法,和大家分享。
一、在listview中分列显示distionary的泛型类的内容。
Dictionary dic = new Dictionary()
dic.Add(1, "刘备")
dic.Add(2, "张飞")
dic.Add(3, "赵去")
dic.Add(4, "关羽")
dic.Add(5, "姜维")
listView1.Clear()//清空先前内容
listView1.View = View.Details//分列显示
listView1.Columns.Add("编号")
listView1.Columns.Add("姓名")
foreach (var ee in dic)
{
ListViewItem gg = new ListViewItem(new string[]{ee.Key.ToString(),ee.Value})//这是至关重要的一点。
listView1.Items.Add(gg)
}
二、在listview中分列显示二维数组
(一)我们先建立一个二维数组
listView1.View = View.Details
listView1.Columns.Add("姓名")
listView1.Columns.Add("语文")
listView1.Columns.Add("数学")
listView1.Columns.Add("科学")
listView1.Columns.Add("英语")
string[,] chengji = new string[4, 5]
chengji[0, 0] = "小王"
chengji[0, 1] = "90"
chengji[0, 2] = "98"
chengji[0, 3] = "88"
chengji[0, 4] = "92"
chengji[1, 0] = "小李"
chengji[1, 1] = "92"
chengji[1, 2] = "94"
chengji[1, 3] = "98"
chengji[1, 4] = "93"
chengji[2, 0] = "小黄"
chengji[2, 1] = "91"
chengji[2, 2] = "92"
chengji[2, 3] = "93"
chengji[2, 4] = "94"
chengji[3, 0] = "小张"
chengji[3, 1] = "95"
chengji[3, 2] = "94"
chengji[3, 3] = "93"
chengji[3, 4] = "92"
(二)下面是几种分列显示二维数组的几种方法。
1、第一种分列显示方法:
listView1.Clear()
for (int i = 0i <chengji.GetLength(0)i++)
{
ListViewItem bb = new ListViewItem(new string[] { chengji[i, 0], chengji[i, 1], chengji[i, 2], chengji[i, 3], chengji[i, 4] })
listView1.Items.Add(bb)
}
2、第二种分列显示方法:
上面的listview分列显示还可以用下面的方法。
listView1.Clear()
ListViewItem cj
for (int i = 0i <chengji.GetLength(0)i++)
{
cj = new ListViewItem(chengji[i,0])
cj.SubItems.Add(chengji[i, 1])
cj.SubItems.Add(chengji[i,2])
cj.SubItems.Add(chengji[i, 3])
cj.SubItems.Add(chengji[i, 4])
listView1.Items.Add(cj)
3、第三种分列显示方法:
如果我们把二维数组转化为一维数组(即结合上面两种方法)还可以用下面的方法分列显示。
listView1.Clear()
ListViewItem cjj
string[] sstr = new string[chengji.GetLength(1)]
for (int i = 0i <chengji.GetLength(0)i++)
{
for (int j = 0j <chengji.GetLength(1)j++)
{
sstr[j] = chengji[i, j]
}
cjj = new ListViewItem(sstr)
listView1.Items.Add(cjj)
}
话不多说直接上代码,可以的话望采纳
这是HTML的代码,.NET自带的分页,分页考过去可以直接用,DIV可以不要
<div >
<div >
<uc1:PageControl ID="Page2" runat="server" ShowFirstLast="true" ShowPrevNext="true"
FirstPageText="首 页" LastPageText="末 页" PrevPageText="上一页" NextPageText="下一页"
AlwaysShow="true" ShowCustomInfoSec="left" NumericButtonCount="5" PagingButtonSpacing="25px"
SubmitButtonClass="btn blue" SubmitButtonStyle="margin-left:10pxfont-size:13pxwidth:30pxvertical-align:middle text-align:centerheight: 23pxpadding:0"
CustomInfoHTML="当前 %CurrentPageIndex% 页 共 %PageCount% 页 共 %CountNum% 条数据" CustomInfoClass="label" />
</div>
</div>
后台代码
Page2._urlPageIndexName = "page"
Page2.PageSize = PageSize//设置每页显示的项数
//查询数据并返回数据条数,页数
rptList.DataSource = ADBLL.GetPageInstance(CurrentPage, PageSize)
Page2.PageCount = PageCount//总页数
Page2.CountNum = CountNum//数据条数
rptList.DataBind()//绑定数据到list显示
这样就搞定了。
以上就是关于Android listview怎么实现滚动分页全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!