Android中动态更新ListView
生活随笔
收集整理的這篇文章主要介紹了
Android中动态更新ListView
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在使用ListView時,會遇到當ListView列表滑動到最底端時,添加新的列表項的問題,本文通過代碼演示如何動態的添加新的列表項到ListView中。
實現步驟:調用ListView的setOnScrollListener()方法設置滑動監聽器,實現OnScrollListener接口的方法,判斷當列表滑動到最低端時,加載新的列表項。
其中OnScrollListener接口需要實現如下兩個方法:
onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
view 報告滑動狀態的視圖
firstVisibleItem 可視的第一個列表項的索引
visibleItemCount 可視的列表項個數
totalItemCount 總共的列表項個數
onScrollStateChanged(AbsListView view, int scrollState)
view 報告滑動狀態的視圖
scrollState 滑動狀態
滑動狀態包括
SCROLL_STATE_IDLE : 0 視圖沒有滑動
SCROLL_STATE_TOUCH_SCROLL : 1 用戶正在觸摸滑動,手指仍在屏幕上
SCROLL_STATE_FLING : 2 用戶之前觸摸滑動,現在正在滑行,直到停止
下面通過代碼給大家演示效果
[java]?view plaincopy <?xml?version="1.0"?encoding="utf-8"?>?? <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:orientation="vertical"?? ????android:layout_width="fill_parent"?? ????android:layout_height="fill_parent"?? ????>?? ????<ListView?? ????????android:id="@id/android:list"?? ????????android:layout_width="match_parent"?? ????????android:layout_height="match_parent"?? ????????android:layout_weight="1"?? ????????android:drawSelectorOnTop="false"?? ????????/>?? </LinearLayout>?? [java]?view plaincopy //?footer.xml?? [java]?view plaincopy <?xml?version="1.0"?encoding="utf-8"?>?? <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"?? ????android:layout_width="fill_parent"?? ????android:layout_height="wrap_content"?? ????android:gravity="center"?? ????android:orientation="horizontal"?? ????>?? ????<ProgressBar?? ????????android:id="@+id/progressbar"?? ????????android:layout_width="wrap_content"?? ????????android:layout_height="wrap_content"?? ????????style="\?android:attr/progressBarStyleSmall"?? ????????/>?? ????<TextView?? ????????android:layout_width="wrap_content"?? ????????android:layout_height="wrap_content"?? ????????android:textSize="20.0sp"?? ????????android:text="正在加載..."?? ????????/>?? </LinearLayout>?? public?class?MainActivity?extends?ListActivity?? {?? ????private?ListView?mListView;?? ????private?CustomAdapter?mAdapter;?? ????private?int?mScrollState;?? ????private?View?mFooter;?? ?? ????@Override?? ????public?void?onCreate(Bundle?savedInstanceState)?? ????{?? ????????super.onCreate(savedInstanceState);?? ????????setContentView(R.layout.main);?? ?? ????????//獲取ListView?? ????????mListView?=?getListView();?? ????????//根據footer.xml描述創建View?? ????????mFooter?=?getLayoutInflater().inflate(R.layout.footer,?null);?? ????????//?在ListView底部添加正在加載視圖?? ????????//注意:addFooterView方法需要在調用setListAdapter方法前調用!?? ????????mListView.addFooterView(mFooter);?? ????????mAdapter?=?new?CustomAdapter();?? ????????setListAdapter(mAdapter);?? ????????//給ListView添加滾動監聽器?? ????????mListView.setOnScrollListener(new?AbsListView.OnScrollListener()?? ????????{?? ????????????@Override?? ????????????public?void?onScrollStateChanged(AbsListView?view,?int?scrollState)?? ????????????{?? ????????????????//記錄當前狀態?? ????????????????mScrollState?=?scrollState;?? ????????????}?? ?? ????????????@Override?? ????????????public?void?onScroll(AbsListView?view,?int?firstVisibleItem,?int?visibleItemCount,?int?totalItemCount)?? ????????????{?? ????????????????//?可視的最后一個列表項的索引?? ????????????????int?lastVisibleItem?=?firstVisibleItem?+?visibleItemCount?-?1;?? ????????????????//當列表正處于滑動狀態且滑動到列表底部時,執行?? ????????????????if?(mScrollState?!=?AbsListView.OnScrollListener.SCROLL_STATE_IDLE?? ????????????????????&&?lastVisibleItem?==?totalItemCount?-?1)?? ????????????????{?? ????????????????????//?執行線程,模擬睡眠5秒鐘后添加10個列表項?? ????????????????????new?Thread()?? ????????????????????{?? ?? ????????????????????????private?Handler?handler?=?new?Handler()?? ????????????????????????{?? ?? ????????????????????????????@Override?? ????????????????????????????public?void?handleMessage(Message?msg)?? ????????????????????????????{?? ????????????????????????????????super.handleMessage(msg);?? ????????????????????????????????//增加Item數量?? ????????????????????????????????mAdapter.count?+=?10;?? ????????????????????????????????//通知數據集變化?? ????????????????????????????????mAdapter.notifyDataSetChanged();?? ????????????????????????????}?? ?? ????????????????????????};?? ?? ????????????????????????@Override?? ????????????????????????public?void?run()?? ????????????????????????{?? ????????????????????????????super.run();?? ????????????????????????????try?? ????????????????????????????{?? ????????????????????????????????sleep(5000);?? ????????????????????????????????handler.sendEmptyMessage(0);?? ????????????????????????????}?catch?(InterruptedException?e)?? ????????????????????????????{?? ????????????????????????????????e.printStackTrace();?? ????????????????????????????}?? ????????????????????????}?? ?? ????????????????????}.start();?? ????????????????}?? ????????????}?? ????????});?? ????}?? ?? ????private?class?CustomAdapter?extends?BaseAdapter?? ????{?? ????????//?初始列表項數量?? ????????int?count?=?20;??? ?? ????????@Override?? ????????public?int?getCount()?? ????????{?? ????????????return?count;?? ????????}?? ?? ????????@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)?? ????????{?? ????????????TextView?result?=?(TextView)?convertView;?? ????????????//動態創建TextView添加早ListView中?? ????????????if?(result?==?null)?? ????????????{?? ????????????????result?=?new?TextView(MainActivity.this);?? ????????????????result.setTextAppearance(MainActivity.this,?android.R.style.TextAppearance_Large);?? ????????????????AbsListView.LayoutParams?layoutParams?=?new?AbsListView.LayoutParams?? ????????????????????????????????????????????????????????(AbsListView.LayoutParams.FILL_PARENT,?? ????????????????????????????????????????????????????????AbsListView.LayoutParams.WRAP_CONTENT);?? ????????????????result.setLayoutParams(layoutParams);?? ????????????????result.setGravity(Gravity.CENTER);?? ????????????}?? ????????????result.setText("第?"?+?(position?+?1)+"行");?? ????????????return?result;?? ????????}?? ????}?? }?? [java]?view plaincopy 效果預覽??
其中OnScrollListener接口需要實現如下兩個方法:
onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
view 報告滑動狀態的視圖
firstVisibleItem 可視的第一個列表項的索引
visibleItemCount 可視的列表項個數
totalItemCount 總共的列表項個數
onScrollStateChanged(AbsListView view, int scrollState)
view 報告滑動狀態的視圖
scrollState 滑動狀態
滑動狀態包括
SCROLL_STATE_IDLE : 0 視圖沒有滑動
SCROLL_STATE_TOUCH_SCROLL : 1 用戶正在觸摸滑動,手指仍在屏幕上
SCROLL_STATE_FLING : 2 用戶之前觸摸滑動,現在正在滑行,直到停止
下面通過代碼給大家演示效果
[java]?view plaincopy
然后是主代碼:
[java]?view plaincopy
總結
以上是生活随笔為你收集整理的Android中动态更新ListView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监听ListView滚动到最底部
- 下一篇: android sina oauth2.