0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】ListViewを複数回に分けて表示する

Posted at

環境

  • 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;
                        }
                    }
                }
            }
        };
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?