当前位置: 首页 > article >正文

ListView的分页显示

有的时候,ListView的数据是从网上传来的,用户不需要那么多的数据,

那么就先让它显示其中一小部分,然后让用户自己去点击加载剩余数据。

代码实现:

布局文件-主layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


  <ListView 
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:id="@+id/lv_list"
      ></ListView>


</LinearLayout>
布局文件-items
<?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:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/tv_item"
    />
    
</LinearLayout>
布局文件-listview底部view
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/fl_more"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >


    <LinearLayout
        android:id="@+id/ll_wait"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal"
        android:gravity="center_vertical"
        android:visibility="invisible"
        >
        <ProgressBar 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        <TextView 
            android:text="正在加载请稍等..."
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
    
         <LinearLayout
        android:id="@+id/ll_more"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:orientation="vertical"
        >
         <TextView 
            android:text="查看更多"
            android:textSize="20sp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
        </LinearLayout>


</FrameLayout>

代码:activty
package com.hwh.list;


import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;


public class ListDemoActivity extends Activity {
private ListView lv_list;
private List<String> data;//总数据集合
private List<String> show_data;//要显示的数据集合
private LinearLayout ll_wait;//等待中的界面
private LinearLayout ll_more;//显示跟多的界面
private ListAdapter adapter;//数据适配器
private View view;//listview的底部view
private Handler handler=new Handler()
{
public void handleMessage(Message msg) {
if(msg.what==10)
{
ll_wait.setVisibility(LinearLayout.INVISIBLE);
ll_more.setVisibility(LinearLayout.VISIBLE);
setShowData(5);
adapter.setData(show_data);
adapter.notifyDataSetChanged();
//如果要显示的数据和总数据的大小一样则不显示更多条目
if (show_data.size() == data.size()) {
lv_list.removeFooterView(view);
}
}
};
};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv_list=(ListView) findViewById(R.id.lv_list);
        data=new ArrayList<String>();
        show_data=new ArrayList<String>();
        //使用假数据模拟从网上请求
        for(int i=1;i<=20;i++)
        {
        data.add(i+"条数据,分页显示");
        }
        setShowData(5);
        view=initFooterView();
        lv_list.addFooterView(view);//添加底部的view
        adapter=new ListAdapter(show_data, this);
        lv_list.setAdapter(adapter);
    }
    /**
     * 设置每页显示几条
     * @param pagesize
     */
    public void setShowData(int pagesize)
    {
    int index=show_data.size();
    for(int i=0;i<pagesize;i++)
    {
    show_data.add(data.get(index+i));
    }
    }
    /**
     * 初始化底部的view并返回
     * @return
     */
    public View initFooterView()
    {
    FrameLayout view=(FrameLayout) View.inflate(this, R.layout.more_item, null);
    ll_wait=(LinearLayout) view.findViewById(R.id.ll_wait);
    ll_more=(LinearLayout) view.findViewById(R.id.ll_more);
    view.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
ll_wait.setVisibility(LinearLayout.VISIBLE);
ll_more.setVisibility(LinearLayout.INVISIBLE);
new Thread(){
public void run() {
try {
//模拟联网的延迟
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg=handler.obtainMessage(10);
handler.sendMessage(msg);
};
}.start();
}
});
    return view;
    }
}
代码:数据适配器
package com.hwh.list;


import java.util.List;


import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;


public class ListAdapter extends BaseAdapter {


private List<String> data;
private Context context;
private static TextView tv;

public void setData(List<String> data) {
this.data = data;
}


public ListAdapter(List<String> data, Context context) {
this.data = data;
this.context = context;
}


@Override
public int getCount() {
// TODO Auto-generated method stub
return data.size();
}


@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return data.get(position);
}


@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
String str=data.get(position);
View view;
if(convertView!=null)
{
view=convertView;
}
else
{
view=View.inflate(context, R.layout.list_items, null);
}
tv=(TextView) view.findViewById(R.id.tv_item);
tv.setText(str);
return view;
}


}


这里只是ListView分页的简单实现,具体的功能还得看项目中的业务需求。


------不足之处请大家指出,谢谢。

http://www.lryc.cn/news/2413540.html

相关文章:

  • django学习笔记一:搭建简易博客
  • 手把手教如何搭建Linux环境(搭建云服务器) (Linux基础篇p1)_linux系统搭建云平台
  • Windows修改右键新建菜单【Win10、Win11版】
  • 探秘高性能网络库:LiteNetLib
  • 博客大巴,自动登录,并发布信息开发小计。
  • dropbox 怎么使用_如何在一台PC上使用多个Dropbox帐户
  • 虾米穷逼 VIP 事件回顾和由此引发的思考
  • 每天一篇论文 316/365 用于欠驱动系统能量控制端到端学习的深拉格朗日网络
  • 大数据最全数据仓库建设方案详细:数据平台建设_三库数据平台建设方案(3),设计思想与代码质量优化+程序性能优化+开发效率优化
  • python challenge
  • Wifi 破解原理及教程
  • android 炫酷时间轴,这38款超级炫酷的时间轴特效代码案例,总有一款是你需要的...
  • 整理一些博客网站,助力快速搭建个人知识记录平台
  • 百度地图api初次申请及简单应用
  • Dialog.hide() or Dialog.dismiss()?
  • Matlab R2022a安装
  • 【OpenCV图像处理】三、图像的逻辑运算
  • winrar3.93
  • 某东令牌价js加密
  • 解决目前阶段翻译插件Translation谷歌翻译的问题
  • gameloft java 游戏_每一款JAVA游戏都是经典,但只有四款游戏,是90%玩家从小玩到大...
  • 绿坝花季护航,为何如此吸引眼球?
  • Oracle sql 复习题目总结
  • DDD 领域驱动设计落地实践系列:战略设计和战术设计
  • PCI简易通讯控制器驱动的安装办法
  • 【算法】----完全背包问题(动态规划)
  • 编程行业里面的新行话
  • 双重标准? Retina屏科学原理
  • ScriptManager的用法
  • Initialization error Could not initializa “D:\app\Administrator\product\11.2.0\dbhome_1\bin\oci...“