`

ListView滑动加载

阅读更多
效果图:
[img]

[/img]

主类:
package com.amaker.listview2;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;
import android.widget.LinearLayout.LayoutParams;

public class ListViewForLoading extends Activity implements OnScrollListener {

    private listViewAdapter adapter = new listViewAdapter();
    ListView listView;
    LinearLayout loadingLayout;
    private Thread mThread;
    /**
     * 设置布局显示属性
     */
    private LayoutParams mLayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    /**
     * 设置布局显示目标最大化属性
     */
    private LayoutParams FFlayoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.FILL_PARENT);

    private ProgressBar progressBar;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            switch (msg.what) {
            case 1:
                if (adapter.count <= 41) {
                    adapter.count += 10;
                    int currentPage = adapter.count / 10;
                    Toast.makeText(getApplicationContext(),"第" + currentPage + "页", Toast.LENGTH_LONG).show();
                } else {
                    listView.removeFooterView(loadingLayout);
                }
                //重新刷新Listview的adapter里面数据
                adapter.notifyDataSetChanged();
                break;
            default:
                break;
            }
        }

    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }

    private void init() {
        // TODO Auto-generated method stub
        // 线性布局
        LinearLayout layout = new LinearLayout(this);
        // 设置布局 水平方向
        layout.setOrientation(LinearLayout.HORIZONTAL);
        // 进度条
        progressBar = new ProgressBar(this);
        // 进度条显示位置
        progressBar.setPadding(0, 0, 15, 0);
        // 把进度条加入到layout中
        layout.addView(progressBar, mLayoutParams);
        // 文本内容
        TextView textView = new TextView(this);
        textView.setText("加载中...");
        textView.setGravity(Gravity.CENTER_VERTICAL);
        // 把文本加入到layout中
        layout.addView(textView, FFlayoutParams);
        // 设置layout的重力方向,即对齐方式是
        layout.setGravity(Gravity.CENTER);

        // 设置ListView的页脚layout
        loadingLayout = new LinearLayout(this);
        loadingLayout.addView(layout, mLayoutParams);
        loadingLayout.setGravity(Gravity.CENTER);

        // 得到一个ListView用来显示条目
        listView = (ListView) findViewById(R.id.tv);
        // 添加到脚页显示
        listView.addFooterView(loadingLayout);
        // 给ListView添加适配器
        listView.setAdapter(adapter);
        // 给ListView注册滚动监听
        listView.setOnScrollListener(this);
    }

    /**
     * 要用用于生成显示数据
     * 
     * @author huangbq
     * 
     */
    class listViewAdapter extends BaseAdapter {
        int count = 10;

        public int getCount() {
            return count;
        }

        public Object getItem(int pos) {
            return pos;
        }

        public long getItemId(int pos) {
            return pos;
        }

        public View getView(int pos, View v, ViewGroup p) {
            TextView view;
            if (v == null) {
                view = new TextView(ListViewForLoading.this);
            } else {
                view = (TextView) v;
            }
            view.setText("ListItem " + pos);
            view.setTextSize(20f);
            view.setGravity(Gravity.CENTER);
            view.setHeight(60);
            return view;
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // TODO Auto-generated method stub
        if(firstVisibleItem+visibleItemCount==totalItemCount)
        {
            //开线程去下载网络数据
            if (mThread == null || !mThread.isAlive()) {
                mThread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            //这里放你网络数据请求的方法,我在这里用线程休眠5秒方法来处理
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        Message message = new Message();
                        message.what = 1;
                        handler.sendMessage(message);
                    }
                };
                mThread.start();                
            }
        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub        
    }

    
}


布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="listview滑动分页加载"
    />
<ListView 
	android:layout_height="wrap_content" 
	android:id="@+id/tv"
	android:layout_width="match_parent"/>
</LinearLayout>
  • 大小: 16 KB
分享到:
评论

相关推荐

    知识共享-Android之ListView滑动加载、软缓存、懒加载(雷惊风)

    以上是对"知识共享-Android之ListView滑动加载、软缓存、懒加载"这一主题的详细解释,希望对你理解Android开发中的这些重要概念有所帮助。在实际开发中,熟练掌握这些技巧能够显著提升应用的性能和用户体验。

    ListVIew滑动加载

    "ListView滑动加载"是指实现ListView的无限滚动或者下拉刷新、上拉加载更多功能。这种功能常见于各种社交应用和电商应用,用户可以无缝地浏览列表内容,无需手动翻页。以下是对这个主题的详细讲解: 1. **ListView...

    android ListView滑动自动加载

    本篇将详细讲解如何实现ListView的滑动自动加载功能,即“无限滚动”。 首先,我们要理解这个功能的基本原理:当用户滚动ListView到接近底部时,程序会自动请求更多的数据并将其添加到列表中。这个特性通常被称为...

    安卓listview相关相关-listview滑动到底部自动加载数据并显示滚动的底部的那个条目点击按钮回到顶部.zip

    这个压缩包"安卓listview相关相关-listview滑动到底部自动加载数据并显示滚动的底部的那个条目点击按钮回到顶部.zip"主要包含了一个实现特定功能的ListView的示例。下面我们将详细探讨这些知识点。 1. **ListView的...

    android listview滑动到底部加载数据

    "android listview滑动到底部加载数据"这个主题涉及到一个常见的功能需求:无限滚动或称为“上拉加载更多”。这种设计模式允许用户在滚动到ListView底部时动态加载更多的内容,从而提供更好的用户体验,避免一次性...

    【ListView】动态加载之滑动加载

    通过以上步骤和注意事项,我们可以有效地在ListView中实现动态加载和滑动加载功能,为用户提供流畅的滚动体验。在实际项目中,还可以根据需求进行优化,如使用RecyclerView替代ListView,或者采用更高效的加载策略。

    Fragment+ListView下拉加载上拉刷新

    在Android应用开发中,"Fragment+ListView下拉加载上拉刷新"是一个常见的需求,它能够提升用户体验,使得用户可以方便地查看更多的数据而无需手动翻页。本篇将深入探讨如何实现这一功能,主要涉及的技术点是Fragment...

    Android中ListView下拉刷新和上拉加载更多的实现

    ListView不仅支持滑动滚动,还可以通过集成下拉刷新和上拉加载更多功能,提升用户体验。这篇博客文章将详细介绍如何在Android项目中实现ListView的这两种高级特性。 首先,下拉刷新(Pull-to-Refresh)功能允许用户...

    ListView滑动控件(一)(修正版)

    总的来说,“ListView滑动控件(一)(修正版)”涵盖了Android开发中增强ListView交互性的多个方面,包括但不限于侧滑删除、上滑加载更多、性能优化和自定义动画。开发者通过深入理解和应用这些技术,可以为用户...

    安卓图片加载缓存相关-AsyncTask的使用及ListView的常见优化asyncTask异步加载数据使用了LruCache优化图片加载通过滑动监听提高ListView滑动流畅度.rar

    AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...

    ListView滑动到底部时自动加载新的内容

    总之,实现ListView滑动到底部自动加载新内容的功能,需要监听滚动事件、处理数据加载和更新UI,同时考虑用户体验和性能优化。随着Android SDK的发展,开发者可以选择更先进的组件和工具来实现这一功能,如...

    Android ListView 滑动分页

    滑动分页技术是当用户滚动到底部时,自动加载更多数据的功能,这在处理大量数据时非常实用,可以提高用户体验并节省流量。本篇文章将详细讲解如何实现Android ListView的滑动分页功能。 首先,理解滑动分页的基本...

    viewpage嵌套listview,效果:滑动listview删除,滑动非listview区域viewpage翻页

    在标题所描述的场景中,为了实现在ListView滑动时删除条目的功能,我们需要创建一个自定义的ItemTouchHelper.Callback,并重写其相关方法,如onSwiped(),在这个方法中,我们可以调用Adapter的notifyDataSetChanged...

    listview自动加载

    实现`ListView滑动到底部自动加载`的核心思路是监听ListView的滚动事件,并判断是否已经滑动到底部。以下是一个简化版的实现步骤: 1. **设置适配器(Adapter)**:首先,你需要创建一个自定义的Adapter来填充...

    解决scrollView和listview滚动冲突,实现listview滑动到顶端和底部之后还能拖拽一定的距离,松开后返回

    接下来,我们要实现ListView滑动到底部或顶部后还能继续拖拽一段距离,松手后自动回弹的效果。这可以通过监听ListView的滑动状态并结合Scroller类来实现。以下是一般步骤: 1. **监听滑动状态**:通过重写ListView...

    Android 实现ListView滚动到底部自动加载数据

    当用户滚动到ListView的底部时,自动加载更多数据的功能通常被称为“无限滚动”或“下拉加载更多”。这种功能可以提升用户体验,避免用户手动翻页。下面我们将详细讨论如何在Android中实现这个功能。 首先,你需要...

    android实现仿qq中listview滑动菜单

    "仿QQ中listview滑动菜单"是一个常见的设计模式,它允许用户通过滑动列表项来展示隐藏的菜单,比如删除或打开按钮。这种功能可以提升应用的互动性和易用性。接下来,我们将深入探讨如何在Android中实现这样的滑动...

    android ListView滑动分页加载和点击分页加载,以及复用convertView综合案例

    综上所述,Android ListView的滑动分页加载和点击分页加载是提升用户体验的重要手段,而convertView的复用机制则是优化性能的关键。理解并熟练掌握这些技术,对于开发高效、流畅的Android应用至关重要。在实际项目中...

    listview实现动态加载

    - 为了解决ListView滑动时频繁创建和销毁View导致性能问题,开发者常使用ViewHolder模式。ViewHolder保存了列表项中的各个子View引用,减少findViewById的调用,提高性能。 4. **动态加载原理**: - 动态加载通常...

Global site tag (gtag.js) - Google Analytics