環境
- AndroidStudio 2.2.2
- Java 1.8.0
- Android 2.3.3
activity.java
public class MyActivity extends Activity {
/**
* 1度に追加するリストの数.
*/
private int listAddSize;
/**
* リストビューに表示するアイテム.
*/
private ArrayList<String> arrayList;
/**
* アダプター.
*/
private ArrayAdapter<String> adapter;
@Override
protected final void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//画面作成
LinearLayout linearLayout = new LinearLayout(this);
setContentView(linearLayout);
//リストアイテム作成
arrayList = new ArrayList<>();
int listSize = 150;
for (int i = 1; i <= listSize; i++) {
arrayList.add("item:" + i);
}
//アダプタ作成
adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1
);
//アダプタに初期表示分追加
listAddSize = 50;
for (int i = 0; i < listAddSize; i++) {
if (i < arrayList.size()) {
adapter.add(arrayList.get(i));
} else {
break;
}
}
//リストビュー作成
ListView listView = new ListView(this);
listView.setAdapter(adapter);
listView.setOnScrollListener(setOnScrollLast());
linearLayout.addView(listView);
}
/**
* リストをスクロールしたときの処理を作成し、返却.
*
* @return リストをスクロールしたときの処理
*/
private AbsListView.OnScrollListener setOnScrollLast() {
return new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(
final AbsListView view,
final int scrollState) {
}
@Override
public void onScroll(
final AbsListView view,
final int firstVisibleItem,
final int visibleItemCount,
final int totalItemCount) {
/**
* itemPrecense アイテム数が1以上ならtrue
* positionIsLast リストビューの最終行を表示していればtrue
*/
boolean itemPrecense = totalItemCount > 0;
boolean positionIsLast
= totalItemCount == firstVisibleItem + visibleItemCount;
if (itemPrecense && positionIsLast) {
for (int i = 0; i < listAddSize; i++) {
if (totalItemCount + i < arrayList.size()) {
adapter.add(arrayList.get(totalItemCount + i));
} else {
break;
}
}
}
}
};
}
}