歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中動態更新ListView【附源碼】

Android中動態更新ListView【附源碼】

日期:2017/3/1 10:14:00   编辑:Linux編程

在使用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 用戶之前觸摸滑動,現在正在滑行,直到停止

下面通過代碼給大家演示效果

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <ListView
  8. android:id="@id/android:list"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:layout_weight="1"
  12. android:drawSelectorOnTop="false"
  13. />
  14. </LinearLayout>

// footer.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:gravity="center"
  6. android:orientation="horizontal"
  7. >
  8. <ProgressBar
  9. android:id="@+id/progressbar"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. style="\?android:attr/progressBarStyleSmall"
  13. />
  14. <TextView
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:textSize="20.0sp"
  18. android:text="正在加載..."
  19. />
  20. </LinearLayout>

然後是主代碼:

  1. public class MainActivity extends ListActivity
  2. {
  3. private ListView mListView;
  4. private CustomAdapter mAdapter;
  5. private int mScrollState;
  6. private View mFooter;
  7. @Override
  8. public void onCreate(Bundle savedInstanceState)
  9. {
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. //獲取ListView
  13. mListView = getListView();
  14. //根據footer.xml描述創建View
  15. mFooter = getLayoutInflater().inflate(R.layout.footer, null);
  16. // 在ListView底部添加正在加載視圖
  17. //注意:addFooterView方法需要在調用setListAdapter方法前調用!
  18. mListView.addFooterView(mFooter);
  19. mAdapter = new CustomAdapter();
  20. setListAdapter(mAdapter);
  21. //給ListView添加滾動監聽器
  22. mListView.setOnScrollListener(new AbsListView.OnScrollListener()
  23. {
  24. @Override
  25. public void onScrollStateChanged(AbsListView view, int scrollState)
  26. {
  27. //記錄當前狀態
  28. mScrollState = scrollState;
  29. }
  30. @Override
  31. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
  32. {
  33. // 可視的最後一個列表項的索引
  34. int lastVisibleItem = firstVisibleItem + visibleItemCount - 1;
  35. //當列表正處於滑動狀態且滑動到列表底部時,執行
  36. if (mScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE
  37. && lastVisibleItem == totalItemCount - 1)
  38. {
  39. // 執行線程,模擬睡眠5秒鐘後添加10個列表項
  40. new Thread()
  41. {
  42. private Handler handler = new Handler()
  43. {
  44. @Override
  45. public void handleMessage(Message msg)
  46. {
  47. super.handleMessage(msg);
  48. //增加Item數量
  49. mAdapter.count += 10;
  50. //通知數據集變化
  51. mAdapter.notifyDataSetChanged();
  52. }
  53. };
  54. @Override
  55. public void run()
  56. {
  57. super.run();
  58. try
  59. {
  60. sleep(5000);
  61. handler.sendEmptyMessage(0);
  62. } catch (InterruptedException e)
  63. {
  64. e.printStackTrace();
  65. }
  66. }
  67. }.start();
  68. }
  69. }
  70. });
  71. }
  72. private class CustomAdapter extends BaseAdapter
  73. {
  74. // 初始列表項數量
  75. int count = 20;
  76. @Override
  77. public int getCount()
  78. {
  79. return count;
  80. }
  81. @Override
  82. public Object getItem(int position)
  83. {
  84. return position;
  85. }
  86. @Override
  87. public long getItemId(int position)
  88. {
  89. return position;
  90. }
  91. @Override
  92. public View getView(int position, View convertView, ViewGroup parent)
  93. {
  94. TextView result = (TextView) convertView;
  95. //動態創建TextView添加早ListView中
  96. if (result == null)
  97. {
  98. result = new TextView(MainActivity.this);
  99. result.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);
  100. AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams
  101. (AbsListView.LayoutParams.FILL_PARENT,
  102. AbsListView.LayoutParams.WRAP_CONTENT);
  103. result.setLayoutParams(layoutParams);
  104. result.setGravity(Gravity.CENTER);
  105. }
  106. result.setText("第 " + (position + 1)+"行");
  107. return result;
  108. }
  109. }
  110. }

效果預覽:

Android中動態更新ListView源碼下載

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/8月/4日/Android中動態更新ListView【附源碼】/

Copyright © Linux教程網 All Rights Reserved