Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 分頁加載

分頁加載

編輯:關於Android編程

現在分頁加載在apk中應用廣泛 那麼是怎麼實現的呢 下面讓我們舉一個小例子來看一下
首先是我們的自定義的listview 在布局中引用 那麼就看一下我們的布局文件


    
    

下面是我們自定義view中的實現代碼

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;

import com.muke.view.R;

public class LoadListView extends ListView implements OnScrollListener{
    private View footer;
    int totalItemCount;//總的數量
    int lastvisibleItem;//最後一個可見的item
    boolean isLoading=false;
    IloadListener iloadListener;

    public LoadListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initView(context);
    }

    public LoadListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public LoadListView(Context context) {
        super(context);
        initView(context);
    }
    /**
     * 添加底部加載提示布局
     * @param context
     */

    private void initView(Context context){
        LayoutInflater inflater = LayoutInflater.from(context);
        footer = inflater.inflate(R.layout.footer, null);
        footer.findViewById(R.id.line).setVisibility(View.GONE);
        this.addFooterView(footer);//添加底部布局文件
        //初始化時設置監聽
        this.setOnScrollListener(this);
    }

    /**
     * 實現滾動監聽的方法
     */
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        //滾動到最低端並且是暫停狀態
        if (totalItemCount==lastvisibleItem&&scrollState==SCROLL_STATE_IDLE){

            if (!isLoading) {
                isLoading=true;
                //設置底部文件可見
                footer.findViewById(R.id.line).setVisibility(view.VISIBLE);
                //加載更多
                iloadListener.onLoad();
            }
        }
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        this.lastvisibleItem=firstVisibleItem+visibleItemCount;
        this.totalItemCount=totalItemCount;
    }
    /**
     * 加載完畢
     */
    public void loadComplete(){
        isLoading=false;
        //設置底部文件不可見
        footer.findViewById(R.id.line).setVisibility(View.GONE);
    }

    public void setInterFace(IloadListener iloadListener) {
        this.iloadListener=iloadListener;
    }

    //加載更多數據的回調接口
    public interface IloadListener{
        public void onLoad();//方法是公開的不能是私有的
    }
}

在自定義的view中需要添加我們的加載底部的布局文件 讓我們一起看一下



    

        
        
    

下面展示的就是我們主類中的實現代碼了 讓我們一起見證一下吧

import java.util.ArrayList;
import java.util.List;
import com.muke.adapter.MyListAdapter;
import com.muke.loadview.LoadListView;
import com.muke.loadview.LoadListView.IloadListener;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
/**
 * 實現思路
 * 添加底部 布局
 * 監聽滾動事件 得到總的item項   最後可見的item  如果最後可見的item項等於總的item項  說明在界面最底端
 * 加載數據  接口回調 
 * @author Administrator
 *
 */
public class MainActivity extends Activity implements IloadListener {
    private LoadListView lv;
    private List list;
    private MyListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (LoadListView) findViewById(R.id.lv);
        lv.setInterFace(this);
        addview();
    }

    private void addview() {
        list = new ArrayList();
        for (int i = 0; i < 20; i++) {
            list.add("高薪就業" + i);
        }
        showListView(list);
    }

    private void addview1() {
        for (int i = 0; i < 2; i++) {
            list.add("相信自己就是奇跡" + i);
        }
    }

    private void showListView(List list2) {
        if (adapter == null) {
            adapter = new MyListAdapter(MainActivity.this, list2);
            lv.setAdapter(adapter);
        } else {
            adapter.notifyDataSetChanged();
        }
    }

    @Override
    public void onLoad() {
        //我們實現一個加載延遲  但是在鏈接網絡的情況下面是不需要的
        Handler handler = new Handler() {
        };
        handler.postDelayed(new Runnable() {//延遲兩秒

            @Override
            public void run() {
                // 獲取更過數據
                addview1();//需要加載的布局
                showListView(list);//通知適配器
                lv.loadComplete();// 通知listview加載完畢
            }
        }, 2000);

    }
}

最後將集合中的數據添加到適配器就可以了
下面看一下我們適配器中的實現代碼

import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.muke.view.R;

public class MyListAdapter extends BaseAdapter {
    private Context context;
    private List list;
    private TextView tv;


    public MyListAdapter(Context context, List list) {
        super();
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView==null) {
            convertView=LayoutInflater.from(context).inflate(R.layout.item, null);
            tv=(TextView) convertView.findViewById(R.id.text_item);
            convertView.setTag(tv);
        }else {
            tv=(TextView) convertView.getTag();
        }
        tv.setText(list.get(position));
        return convertView;
    }

}

適配器中使用到布局文件 下面看一下我麼item項的布局 就是一個textview 我還是把代碼貼上了 看看這個你就會分頁加載了 一定要有耐心哦




    

辛苦了這麼半天 讓我們看一下我們的效果吧
這裡寫圖片描述

上面的是我們原先的數據 下面的是我們加載的數據 每一次加載兩條

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved