閱讀392 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android ListView 數據更新的總結

 

1、android中ListView滾動刷新

 

在做ListView加載數據時如果數據量大的話會造成加載時間過長而卡屏,所以為了解決這個問題,查看了SDK,

在OnScrollListener中有兩個方法

隻要重寫這兩個方法就可以實現滾動加載,例如:

public void onScroll(AbsListView v, int firstVisibleItem,
   int visibleItemCount, int totalItemCount) {
  lastItem = firstVisibleItem + visibleItemCount - 1;
  if (adapter.count == lastItem) {
   adapter.count += 10;
   adapter.notifyDataSetChanged();
  }

 }

 public void onScrollStateChanged(AbsListView view, int scrollState) {
  // TODO Auto-generated method stub

  Log.i("onScrollStateChanged", "onScrollStateChanged");
 }

 

本文來自CSDN博客,轉載請標明出處:https://blog.csdn.net/evy_gyw/archive/2011/01/05/6118196.aspx

 

 

2、Android中的ListView內容刷新問題

最近在學習Android的listView控件時遇到了一個問題,如何添加一個Item到ListView中並及時的刷新出來。在網上查了很多帖子,很多人在問,也很多人在解答,但是總的來說都沒找到詳細的解決方案。對於ListView與數據庫的同步,高手們建議使用ContentProvider對象。但是如果我不使用數據庫呢?也有人回答用notifyDataSetChanged()方法。這倒是一個正確的解決方案,但是對於新手來說,還是比較困惑怎麼去用,這裏我貼一下我的用法:

 

Java代碼
OnClickListener listener2 = new OnClickListener() {           
@Override         
 public void onClick(View v) {               
// TODO Auto-generated method stub              
Map<String, Object> m = new HashMap<String, Object>();              
 String tiString  = tv.getText().toString(); // 注意這裏我為什麼要取出這個EditText的內容              
m.put("prod_na", tiString); // 而不這樣寫 m.put("prod_na", tv.getText());              
m.put("prod_type", tiString); // 因為tv.getText()返回的是Editable對象,真正的數據是被緩存的,                                            // 也就是說你後續的EditText改動都會影響之前添加的Item              
coll.add(m);                              
// 取回Adapter對象,用於調用notifyDataSetChanged方法。             
 SimpleAdapter sAdapter = (SimpleAdapter)lv.getAdapter();               
sAdapter.notifyDataSetChanged();         
  }     
  };  

OnClickListener listener2 = new OnClickListener() {

@Override public void onClick(View v) {

// TODO Auto-generated method stub

Map<String, Object> m = new HashMap<String, Object>();

 String tiString = tv.getText().toString(); // 注意這裏我為什麼要取出這個EditText的內容

m.put("prod_na", tiString); // 而不這樣寫 m.put("prod_na", tv.getText());

m.put("prod_type", tiString); // 因為tv.getText()返回的是Editable對象,真正的數據是被緩存的,

 // 也就是說你後續的EditText改動都會影響之前添加的Item coll.add(m); // 取回Adapter對象,用於調用notifyDataSetChanged方法。 SimpleAdapter sAdapter = (SimpleAdapter)lv.getAdapter(); sAdapter.notifyDataSetChanged(); } };

 

 https://android.group.iteye.com/group/blog/774152

 

這裏涉及到了Android中的MVC模式概念,如何存儲數據,控製和顯示。

你可以認為ListView是一個View,那麼mode是什麼呢?顯然是SimpleAdapter對象,而Control又是什麼呢?那隻能是notifyDataSetChanged()了。當數據變化時,也就是SimpleAdapter所處理的數據變化了,那麼我們就需要調用 notifyDataSetChanged 去通知View作出改變。

最後更新:2017-04-02 06:51:49

  上一篇:go 多線程Runnable和Thread產生線程
  下一篇:go [usaco][舞會燈] party lamps