1. ホーム
  2. アンドロイド

[解決済み】Androidのエンドレス・リスト

2022-04-04 17:47:14

質問

リストの最後に到達したときに通知され、さらにアイテムを読み込むことができるリストを作成するにはどうすればよいですか?

どのように解決するのですか?

の実装が一つの解決策となります。 OnScrollListener に変更(項目の追加など)することができます。 ListAdapter を使いやすい状態にすることができます。 onScroll メソッドを使用します。

以下はその例です。 ListActivity は 40 から始まる整数のリストを表示し、ユーザーがリストの最後までスクロールするとアイテムが追加されます。

public class Test extends ListActivity implements OnScrollListener {

    Aleph0 adapter = new Aleph0();

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(adapter); 
        getListView().setOnScrollListener(this);
    }

    public void onScroll(AbsListView view,
        int firstVisible, int visibleCount, int totalCount) {

        boolean loadMore = /* maybe add a padding */
            firstVisible + visibleCount >= totalCount;

        if(loadMore) {
            adapter.count += visibleCount; // or any other amount
            adapter.notifyDataSetChanged();
        }
    }

    public void onScrollStateChanged(AbsListView v, int s) { }    

    class Aleph0 extends BaseAdapter {
        int count = 40; /* starting amount */

        public int getCount() { return count; }
        public Object getItem(int pos) { return pos; }
        public long getItemId(int pos) { return pos; }

        public View getView(int pos, View v, ViewGroup p) {
                TextView view = new TextView(Test.this);
                view.setText("entry " + pos);
                return view;
        }
    }
}

Webデータの読み込みのような長時間実行されるアクションには、明らかに別のスレッドを使うべきですし、最後のリストアイテムで進行状況を示したいかもしれません(マーケットやGmailアプリがそうしているように)。