有时候在开发的时候有这样的需求,那就是我们需要在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; } }