android 中怎么让ListView可以无限循环加载 Adapter中的数据

来源:互联网 发布:科幻电影知乎 编辑:程序博客网 时间:2024/04/25 20:18

  有时候在开发的时候有这样的需求,那就是我们需要在ListView中无限重复加载一组数据,让我们的listView可以无限下拉。要想做到这点,我们必须自定义Adapter。重点在于们的getCount()方法因为我们的listView在加载数据的时候先要读取的,因为getCount()返回值的大小决定了ListView要加载的行数,所以这里我们需要返回一个很大的值,所以我们直接让它返回Integer.MAX_VALUE,其实这样并不是真正的无限循环,只是我们返回的getCount()值特别大,这样我们的ListView看起来可以无限下拉。

package com.example.jiehuang.longlistview;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {  private ListView mListView;    private BaseAdapter mAdapter;    private List<String> mDataList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.content_main);        mListView = (ListView) findViewById(R.id.listView);        mDataList = new ArrayList<>();        for (int i=0;i<10;i++){            mDataList.add(""+i+"ITEM");        }        mAdapter = new BaseAdapter() {            @Override            public int getCount() {                return Integer.MAX_VALUE;            }            @Override            public Object getItem(int position) {                return position;            }            @Override            public long getItemId(int position) {                return position;            }            @Override            public View getView(int position, View convertView, ViewGroup parent) {                ViewHoider viewHoider;                if (convertView==null){                    convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,parent,false);                     viewHoider = new ViewHoider();                    viewHoider.textView = (TextView) convertView.findViewById(R.id.textView);                    convertView.setTag(viewHoider);                }else{                    viewHoider = (ViewHoider) convertView.getTag();                }                viewHoider.textView.setText(mDataList.get(position%mDataList.size()));                return convertView;            }        };        mListView.setAdapter(mAdapter);        mListView.setSelection(Integer.MAX_VALUE/2+1);    }    public class  ViewHoider{        private TextView textView;    }}






1 0