您的位置:首页 > 其它

ListView分页加载

2015-06-30 14:55 393 查看
1.总的思路是:用一个List来每次加载需要显示的数据。加载完后,此List要清空。

2.具体代码

public class MainActivity extends Activity implements OnClickListener {
    // 数据源
    private String[] strs = new String[] { "1w", "de", "cdc", "vre", "vae",
            "cvds", "ergt", "trh", "jyyku", "yuk", "ytuuu", "koi", "awee",
            "qwe", "zdss", "oui", "hjg", "chcfg", "xcvsdr", "asfa", "fb",
            "breq", "WEGRG", "fsr", "awaw", "grtt", "trh", "nh", "xfds",
            "serew", "hn", "11322" };
    // 临时存储需要加载的数据
    private ArrayList<String> list = new ArrayList<String>();
    private ListView listView = null;
    //上一页按钮
    private Button bt_previousPage = null;
    //下一页按钮
    private Button bt_nextPage = null;
    //显示当前是第几页
    private TextView tv_currentPage = null;
    //显示总页数
    private TextView tv_totalPage = null;
    // 总的数据条数
    private int size = 0;
    // 当前页
    private int page = 0;
    // 总页数
    private int totalPages = 0;
    // 一页要显示的条数
    private int pageSize = 10;
    //自定义显示的适配器
    private StrAdapter adapter = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化控件
        findViews();
        // 得到总的数据条数
        size = strs.length;
        // 得到总的页数
        if (size % pageSize == 0) {
            totalPages = size / pageSize;
        } else {
            totalPages = size / pageSize + 1;
        }
        // 显示总页数
        tv_totalPage.setText(totalPages + "");
        // 开始分页显示
        if (size > pageSize) {
            for (int i = 0; i < pageSize; i++) {
                //加载需要显示的数据
                list.add(strs[i]);
            }
            //还需要显示的数据
            size = size - pageSize;
            //当前页数+1
            page++;
        } else {
            for (int i = 0; i < strs.length; i++) {
                list.add(strs[i]);
            }
            page++;
        }
        // 显示当前页数
        tv_currentPage.setText(page + "");
        // 绑定适配器显示数据
        adapter = new StrAdapter(this, list);
        listView.setAdapter(adapter);
        // 监听点击事件
        bt_previousPage.setOnClickListener(this);
        bt_nextPage.setOnClickListener(this);
    }
    // 加载下一页
    public void getNextPageData() {
        if (size > pageSize) {
            list.clear();
            for (int i = 0; i < pageSize; i++) {
                list.add(strs[i + page * 10]);
            }
            size = size - pageSize;
            page++;
        } else if (size > 0 && size <= pageSize) {
            list.clear();
            for (int i = 0; i < size; i++) {
                list.add(strs[i + page * pageSize]);
            }
            size = size - pageSize;
            page++;
        } else {
        }
        // 更新当前页
        tv_currentPage.setText(page + "");
    }
    public void getPreviousPageData() {
        if (page >= 2) {
            list.clear();
            for (int i = 0; i < 10; i++) {
                list.add(strs[i + (page - 2) * pageSize]);
            }
            page--;
        } else {
        }
        size = strs.length - page * pageSize;
        // 更新当前页
        tv_currentPage.setText(page + "");
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.bt_nextPage) {
            getNextPageData();
            adapter.notifyDataSetChanged();
        } else if (v.getId() == R.id.bt_previousPage) {
            getPreviousPageData();
            adapter.notifyDataSetChanged();
        }
    }
    public void findViews() {
        listView = (ListView) findViewById(R.id.listview);
        bt_previousPage = (Button) findViewById(R.id.bt_previousPage);
        bt_nextPage = (Button) findViewById(R.id.bt_nextPage);
        tv_currentPage = (TextView) findViewById(R.id.tv_currentPage);
        tv_totalPage = (TextView) findViewById(R.id.tv_totalPage);
    }
}  

public class StrAdapter extends BaseAdapter {
    
    private Context context;
    private ArrayList<String> list = null;
    public StrAdapter(Context context,ArrayList<String> list){
        super();
        this.context = context;
        this.list = list;
    }
    
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }
    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup arg2) {
        // TODO Auto-generated method stub
        ViewHolder viewHolder = null;
        if (convertView == null) {
            View view = LayoutInflater.from(context).inflate(
                    R.layout.str_adapter, null);
            viewHolder = new ViewHolder();
            viewHolder.tv = (TextView) view.findViewById(R.id.tv_str);
            view.setTag(viewHolder);
            convertView = view;
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.tv.setText(list.get(position).toString());
        return convertView;
    }
    
    class ViewHolder {
        TextView tv;
    }
}


3.效果

如图~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: