多语言展示
当前在线:1982今日阅读:26今日分享:39

android ListView分页展示

ListView提供了丰富的接口和实现,让我们自定义它的展示,如果遇到数据量很大的时候,就需要进行分页展示了。下面通过一个实例学习下
工具/原料
1

电脑

2

eclipse+android编程环境

方法/步骤
1

新建一个android项目,名称为ListViewAutoPage,其他参数可以自己配置,点击完成

2

首先在layout文件夹下声明listviewinfo.xml,作为listView的主要样式。其内容如下:       

3

声明列表中各个选项的信息展示,listitem.xml定义在layout文件夹下,其内容如下:       

4

设置“加载更多”按钮的样式文件,loadmore.xml。其内容是:   

5

自定义适配器的实现。ListViewAutoAdapter继承BaseAdapter,其实现如下:public class ListViewAutoAdapter extends BaseAdapter { //定义结果集 private static Map result = new HashMap();    private List items;    private LayoutInflater inflater;  //布局信息    //构造函数,参数初始化    public ListViewAutoAdapter(List items, Context context) {          super();          this.items = items;          this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      }   @Override public int getCount() { // TODO Auto-generated method stub return items.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return items.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View contentView, ViewGroup arg2) { // TODO Auto-generated method stub //从数组中获取元素,如果view为空,则填充相应文本信息 contentView=result.get(position);          if(contentView==null){              contentView=inflater.inflate(R.layout.listitem, null);              //找到TextView ,进行文本赋值            TextView text=(TextView) contentView.findViewById(R.id.listItem);              //设置文本显示的内容            text.setText(items.get(position));          }          result.put(position, contentView);          return contentView;   } public void addItem(String item) {            items.add(item);        }    }

6

ListViewAutoPageShow主体函数实现:public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listviewinfo);        //控件初始化        loadMoreView = getLayoutInflater().inflate(R.layout.loadmore, null);            moreButton = (Button) loadMoreView.findViewById(R.id.moreButton);         moreButton.setOnClickListener(new OnClickListener() {                          @Override              public void onClick(View v) {                  // TODO Auto-generated method stub                  moreButton.setText('正在加载...');   //设置按钮文字loading                    //执行加载数据的线程                handler.postDelayed(new Runnable() {                        @Override                        public void run() {                                                        loadData();                                                        adapter.notifyDataSetChanged(); //数据集变化后,通知adapter                        //    listView.setSelection(visibleLastIndex - visibleItemCount + 1); //设置选中项                                                        moreButton.setText('加载更多');    //恢复按钮文字                        }                    }, 1000);                }          });                  listView = (ListView) this.findViewById(R.id.listViewInfo);                  listView.addFooterView(loadMoreView);   //设置列表底部视图                //初始化数据适配器        initAdapter();                  listView.setAdapter(adapter);                //自动为id是list的ListView设置适配器                  listView.setOnScrollListener(this);     //添加滑动监听            //按钮被选中的时候 触发的操作        listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub //展示列表被选中的结果  Toast.makeText(getApplicationContext(), items.get(position),Toast.LENGTH_SHORT).show();   }          });      }         /**        * 初始化适配器        */        private void initAdapter() {                   for (int i = 0; i < 10; i++) {                items.add('第'+String.valueOf(i + 1)+'个选项');            }            adapter = new ListViewAutoAdapter(items,this);        } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub           if (scrollState == OnScrollListener.SCROLL_STATE_IDLE  ) {                 //如果是自动加载,可以在这里放置异步加载数据的代码                 Log.i('LOADMORE', 'loading...');             }     }     /**        * 模拟加载数据        */        private void loadData() {            int count = adapter.getCount();            for (int i = count; i < count + 10; i++) {                adapter.addItem('第'+String.valueOf(i + 1)+'个选项');            }        }

7

程序书写完毕之后,开始运行程序,观察实验结果

推荐信息