ListView動態更新資料

來源:互聯網
上載者:User

ListView就是可以顯示一行行Item的控制項,有時候資料非常多,通常需要分頁顯示,但為了減少使用者的輸入,我們可以動態更新ListView,把下一頁要顯示的資料的添加到當前ListView中。

先看看效果:

需要注意的是在什麼時候去更新資料 ,listVIew的setOnScrollListener監聽是否滾到了最後一條記錄,

取到的資料加到list中,最後記得調用adapter的notifyDataSetChanged,通知listview改變。

不廢話,上代碼。

主檔案:

import java.util.ArrayList;<br />import java.util.List;</p><p>import android.app.Activity;<br />import android.os.AsyncTask;<br />import android.os.Bundle;<br />import android.widget.AbsListView;<br />import android.widget.AbsListView.OnScrollListener;<br />import android.widget.ListView;<br />import android.widget.Toast;</p><p>public class ListViewActivity extends Activity {<br />private ListView listView;<br />//定義適配器<br />private ListItemAdapter listadpter;<br />//定義每一頁顯示行數<br />private int VIEW_COUNT = 20;<br /> //定義的頁數<br />private int index = 0;<br />//當前頁<br />private int currentPage = 1;<br />//所以資料的條數<br /> privateint totalCount;<br /> //每次取的資料,只要最後一次可能不一樣。<br />private int maxResult;<br />//泛型集合ArrayList<br />private ArrayList<Students> arrayList = new ArrayList<Students>();<br />//資料操作的dao類<br />StudentsDAO dao = new StudentsDAO(ListViewActivity.this);<br />//實體bean<br />Students students = new Students();<br />// 標記:上次的ID</p><p>private boolean isUpdating = false;<br />/** Called when the activity is first created. */<br />@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />//初始化介面<br />initView();<br />//插入100條記錄。<br />dao.insert();<br />totalCount = dao.getCount();<br />maxResult = getMaxResult();<br />//調用dao裡面的selectAll()方法<br />arrayList = dao.getAllItems(index, maxResult);<br />//執行個體化適配器<br />System.out.println("arrlist-->"+arrayList.size());<br />listadpter = new ListItemAdapter(ListViewActivity.this,arrayList);<br />//填充適配器<br />listView.setAdapter(listadpter);</p><p>listView.setOnScrollListener(new OnScrollListener() {</p><p>@Override<br />public void onScrollStateChanged(AbsListView view, int scrollState) {</p><p>}</p><p>@Override<br />public void onScroll(AbsListView view, int firstVisibleItem,<br />int visibleItemCount, int totalItemCount) {<br />if(firstVisibleItem + visibleItemCount == totalItemCount && !isUpdating){<br />if(totalItemCount<totalCount){ //防止最後一次取資料進入死迴圈。<br />Toast.makeText(ListViewActivity.this, "正在取第"+(++currentPage)+"的資料", Toast.LENGTH_LONG).show();<br />AsyncUpdateDatasTask asyncUpdateWeiBoDatasTask = new AsyncUpdateDatasTask();<br />asyncUpdateWeiBoDatasTask.execute();<br />}<br />System.out.println("begin update-------------");<br />}<br />}<br />});<br />}<br />//初始化介面方法<br />private void initView() {<br />// TODO Auto-generated method stub<br />listView = (ListView) findViewById(R.id.list);<br />}<br />class AsyncUpdateDatasTask extends AsyncTask<Void, Void, List<Students>> {</p><p>@Override<br />protected List<Students> doInBackground(Void... params) {<br />// TODO Auto-generated method stub<br />isUpdating = true;<br />index += VIEW_COUNT;<br />List<Students> list =new ArrayList<Students>();<br />list = dao.getAllItems(index, maxResult);<br />return list;<br />}<br />@Override<br />protected void onPostExecute(List<Students> result) {<br />// TODO Auto-generated method stub<br />super.onPostExecute(result);<br />arrayList.addAll(result);<br />listadpter.notifyDataSetChanged();<br />isUpdating = false;<br />System.out.println("end update--------------");<br />}<br />}<br /> private int getMaxResult(){<br /> int totalPage = (totalCount+VIEW_COUNT-1)/VIEW_COUNT;<br /> return totalCount-(totalPage-1)*VIEW_COUNT;<br /> }<br />}資料庫Dao檔案:

package com.shao.list;</p><p>import java.util.ArrayList;<br />import java.util.Random;</p><p>import android.content.ContentValues;<br />import android.content.Context;<br />import android.database.Cursor;<br />import android.database.sqlite.SQLiteDatabase;<br />import android.database.sqlite.SQLiteOpenHelper;</p><p>public class StudentsDAO extends SQLiteOpenHelper {</p><p>private final static String AUDIODATABASE_NAME = "student.db";<br />private final static String TABLE = "student";<br />private final static String COLUM_ID = "id";<br />private final static String COLUM_NAME = "name";<br />private final static String COLUM_AGE = "age";<br />private final static int DATABASE_VERSION = 1;<br />private long row;<br />private ArrayList<Students> arrayList;</p><p>public StudentsDAO(Context context) {<br />super(context, AUDIODATABASE_NAME, null, DATABASE_VERSION);<br />// TODO Auto-generated constructor stub<br />}</p><p>@Override<br />public void onCreate(SQLiteDatabase db) {<br />// TODO Auto-generated method stub<br />String sql = "CREATE TABLE " + TABLE + " (" + COLUM_ID<br />+ " INTEGER primary key autoincrement, " + " " + COLUM_NAME<br />+ " text, " + " " + COLUM_AGE + " int)";<br />db.execSQL(sql);<br />}</p><p>@Override<br />public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {<br />// TODO Auto-generated method stub<br />String sql = "DROP TABLE IF EXISTS " + TABLE;<br />db.execSQL(sql);<br />}</p><p>public long insert() {<br />SQLiteDatabase db = getWritableDatabase();<br />ContentValues cv = new ContentValues();<br />Random random = new Random();<br />for(int i=1;i<=100;i++)<br />{<br />cv.put(COLUM_ID, i);<br />cv.put(COLUM_NAME, "name"+String.valueOf(i));<br />cv.put(COLUM_AGE, random.nextInt(100));<br />row = db.insert(TABLE, null, cv);<br />}<br />db.close();<br />return row;<br />}<br />//查詢記錄的總數<br /> public int getCount() {<br /> SQLiteDatabase db = getWritableDatabase();<br /> String sql = "select count(*) from '"+TABLE+"'";<br /> Cursor c = db.rawQuery(sql, null);<br /> c.moveToFirst();<br /> int length = c.getInt(0);<br /> c.close();<br /> db.close();<br /> // System.out.println("length-->"+length);<br /> return length;<br /> }<br /> public ArrayList<Students> getAllItems(int firstResult, int maxResult) {<br /> arrayList=new ArrayList<Students>();<br /> SQLiteDatabase db = getWritableDatabase();<br /> String sql = "select * from '"+TABLE+"' limit ?,?";<br /> Cursor cursor = db.rawQuery(sql, new String[]{String.valueOf(firstResult), String.valueOf(maxResult)});<br /> if (cursor != null && cursor.getCount() > 0) {<br /> cursor.moveToFirst();<br /> }<br /> for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {<br /> Students students=new Students();<br /> students.setId(cursor.getInt(0));<br /> students.setName(cursor.getString(1));<br /> students.setAge(cursor.getInt(2));<br /> arrayList.add(students);<br /> }<br /> cursor.close();<br /> db.close();<br /> return arrayList;<br /> }</p><p>public ArrayList<Students> selectAll() {<br />arrayList=new ArrayList<Students>();<br />SQLiteDatabase db = this.getWritableDatabase();<br />Cursor cursor = db.query(TABLE, null, null, null, null, null, null);<br />if (cursor != null && cursor.getCount() > 0) {<br />cursor.moveToFirst();<br />}<br />for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {<br />Students students=new Students();<br />students.setId(cursor.getInt(0));<br />students.setName(cursor.getString(1));<br />students.setAge(cursor.getInt(2));<br />arrayList.add(students);<br />}<br />cursor.close();<br />db.close();<br />return arrayList;</p><p>}</p><p>}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.