Android Endless List

后端 未结 10 1188
梦如初夏
梦如初夏 2020-11-22 02:52

How can I create a list where when you reach the end of the list I am notified so I can load more items?

10条回答
  •  太阳男子
    2020-11-22 03:25

    One solution is to implement an OnScrollListener and make changes (like adding items, etc.) to the ListAdapter at a convenient state in its onScroll method.

    The following ListActivity shows a list of integers, starting with 40, adding items when the user scrolls to the end of the list.

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

    You should obviously use separate threads for long running actions (like loading web-data) and might want to indicate progress in the last list item (like the market or gmail apps do).

提交回复
热议问题