最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android中ListView數(shù)據(jù)刷新時的同步方法

 更新時間:2015年05月28日 17:05:58   作者:jayqean  
這篇文章主要介紹了android中ListView數(shù)據(jù)刷新時的同步方法,涉及Android刷新listview實現(xiàn)數(shù)據(jù)同步的技巧,需要的朋友可以參考下

本文實例講述了android中ListView數(shù)據(jù)刷新時的同步方法。分享給大家供大家參考。具體實現(xiàn)方法如下:

public class Main extends BaseActivity { 
 private static final String TAG = "tag"; 
 private static final int STATUS_CHANGE = 0; 
 ExpandableListView mElv; 
 ArrayList<GroupInfo> mGroupArray; 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.main); 
  mElv = (ExpandableListView) findViewById(R.id.contact_list); 
  mStatus = (TextView) findViewById(R.id.setStatus); 
  mGroupArray = getIntent().getParcelableArrayListExtra("groupArray");// => 取數(shù)據(jù) 
  mExpandableAdapter = new ExpandableAdapter(this, Main.this); 
  mElv.setAdapter(mExpandableAdapter);   
  // 異步對比服務器分組和本地分組 
  HandlerThread handlerThread = new HandlerThread("handler_thread"); 
  handlerThread.start(); 
  UpdateGroupHandler myHandler = new UpdateGroupHandler( 
    handlerThread.getLooper()); 
  Message message = myHandler.obtainMessage(); 
  message.sendToTarget(); 
  mHandler = new Handler() { 
   public void handleMessage(Message msg) { 
    switch (msg.what) { 
    case STATUS_CHANGE: 
     // 處理UI更新等操作 
     updateUI(); 
     break; 
    } 
   }; 
  };  
 } 
 /** 
  * 發(fā)送消息更新UI 
  */ 
 private void sendMessageToUpdateUI() { 
  Message msg = new Message(); 
  msg.what = STATUS_CHANGE; 
  mHandler.sendMessage(msg);
  // 向Handler發(fā)送消息,更新UI 
 } 
 private void updateUI() { 
  // 詳細的更新 
  mExpandableAdapter.notifyDataSetChanged();
  // 更新ExpandableListView 
 } 
 /** 
  * 異步刷新分組的handler 
  * 
  * @author administrator 
  * 
  */ 
 class UpdateGroupHandler extends Handler { 
  public UpdateGroupHandler() { 
  } 
  public UpdateGroupHandler(Looper looper) { 
   super(looper); 
  } 
  @Override 
  public void handleMessage(Message msg) { 
   ContactsManagerDbAdapter dbAdapter = new ContactsManagerDbAdapter( 
     Main.this); 
   dbAdapter.open(); 
   // =>doSomeThing... 
   mGroupArray = groupList; 
   System.out.println("========數(shù)據(jù)更新后,刷新listview========="); 
   sendMessageToUpdateUI(); 
  } 
 } 
 private class ExpandableAdapter extends BaseExpandableListAdapter { 
  Activity activity; 
  LayoutInflater layoutInflater; 
  public ExpandableAdapter(Activity a, Context context) { 
   activity = a; 
   layoutInflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  } 
  public Object getChild(int groupPosition, int childPosition) { 
   return mGroupArray.get(groupPosition).getChildList() 
     .get(childPosition); 
  } 
  public long getChildId(int groupPosition, int childPosition) { 
   return childPosition; 
  } 
  public int getChildrenCount(int groupPosition) { 
   return mGroupArray.get(groupPosition).getChildList().size(); 
  } 
  public View getChildView(int groupPosition, int childPosition, 
    boolean isLastChild, View convertView, ViewGroup parent) { 
   // ..... 
   return vi; 
  } 
  public Object getGroup(int groupPosition) { 
   return mGroupArray.get(groupPosition); 
  } 
  public int getGroupCount() { 
   return mGroupArray.size(); 
  } 
  public long getGroupId(int groupPosition) { 
   return groupPosition; 
  } 
  public View getGroupView(int groupPosition, boolean isExpanded, 
    View convertView, ViewGroup parent) { 
   GroupInfo groupInfo = mGroupArray.get(groupPosition); 
   String string = groupInfo.getName(); 
   convertView = (View) layoutInflater.inflate(R.layout.group_layout, 
     null); 
   final TextView textView = (TextView) convertView 
     .findViewById(R.id.groupName); 
   if (textView != null) { 
    textView.setText(string); 
   } 
   return convertView; 
  } 
  public boolean hasStableIds() { 
   return true; 
  } 
  public boolean isChildSelectable(int groupPosition, int childPosition) { 
   return true; 
  } 
 } 
}

代碼只是提取的部分,應該沒多大影響.

上面集合mGroupArray存在數(shù)據(jù)共享,測試多次發(fā)現(xiàn)報錯有兩種:

=>1.java.lang.IndexOutOfBoundsException: Invalid location 3, size is 3
=>2.The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.

第一個問題,數(shù)據(jù)同步問題,我弄了下沒解決.
第二個問題,改變適配器Adapter內(nèi)容時不要在后臺線程中,必須在UI線程中處理
我將上面子線程UpdateGroupHandler里的數(shù)據(jù)更新利用handler提取到了主線程賦值

Message.obj = groupList;

額,改好后測試多次,發(fā)現(xiàn)這兩問題都解決了,發(fā)現(xiàn)還是對handler理解的不夠.

發(fā)下更改的代碼段:

@Override 
public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.main); 
 mElv = (ExpandableListView) findViewById(R.id.contact_list); 
 mStatus = (TextView) findViewById(R.id.setStatus); 
 mGroupArray = getIntent().getParcelableArrayListExtra("groupArray");
 // => 取數(shù)據(jù) 
 mExpandableAdapter = new ExpandableAdapter(this, Main.this); 
 mElv.setAdapter(mExpandableAdapter);   
 // 異步對比服務器分組和本地分組 
 HandlerThread handlerThread = new HandlerThread("handler_thread"); 
 handlerThread.start(); 
 UpdateGroupHandler myHandler = new UpdateGroupHandler( 
   handlerThread.getLooper()); 
 Message message = myHandler.obtainMessage(); 
 message.sendToTarget(); 
 mHandler = new Handler() { 
  public void handleMessage(Message msg) { 
   switch (msg.what) { 
   case STATUS_CHANGE: 
    // 處理UI更新等操作 
    updateUI(msg.obj); 
    break; 
   } 
  }; 
 };  
} 
/** 
* 發(fā)送消息更新UI 
*/ 
private void sendMessageToUpdateUI(ArrayList<GroupInfo> groupList) { 
 Message msg = new Message(); 
 msg.what = STATUS_CHANGE; 
 msg.obj = groupList; 
 mHandler.sendMessage(msg);
 // 向Handler發(fā)送消息,更新UI 
} 
 @SuppressWarnings("unchecked") 
private void updateUI(Object obj) { 
 // 詳細的更新 
 mGroupArray = (ArrayList<GroupInfo>) obj; 
 mExpandableAdapter.notifyDataSetChanged();
 // 更新ExpandableListView 
} 
/** 
 * 異步刷新分組的handler 
 * 
 * @author administrator 
 * 
 */ 
class UpdateGroupHandler extends Handler { 
 public UpdateGroupHandler() { 
 } 
 public UpdateGroupHandler(Looper looper) { 
  super(looper); 
 } 
 @Override 
 public void handleMessage(Message msg) { 
  ContactsManagerDbAdapter dbAdapter = new ContactsManagerDbAdapter( 
    Main.this); 
  dbAdapter.open(); 
  // =>doSomeThing... 
  System.out.println("========數(shù)據(jù)更新后,刷新listview========="); 
  sendMessageToUpdateUI(groupList); 
 } 
}

希望本文所述對大家的Android程序設計有所幫助。

相關文章

  • Java程序員轉Android開發(fā)必讀經(jīng)驗一份

    Java程序員轉Android開發(fā)必讀經(jīng)驗一份

    小編最近幾日偷偷的發(fā)現(xiàn)部分Java程序員想轉安卓開發(fā),故此加緊補充知識,為大家搜集資料,積極整理前人的經(jīng)驗,希望可以給正處于困惑中的你,帶來些許的幫助。
    2017-11-11
  • Android仿直播類app贈送禮物功能

    Android仿直播類app贈送禮物功能

    這篇文章主要介紹了Android仿直播類app贈送禮物功能,本文通過實例代碼效果圖展示的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Android SurfaceView拍照錄像實現(xiàn)方法

    Android SurfaceView拍照錄像實現(xiàn)方法

    這篇文章主要為大家詳細介紹了Android SurfaceView拍照錄像實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android實現(xiàn)搖一搖簡單功能

    Android實現(xiàn)搖一搖簡單功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)搖一搖簡單功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • 創(chuàng)建Android庫的方法及Android .aar文件用法小結

    創(chuàng)建Android庫的方法及Android .aar文件用法小結

    本文給大家介紹了創(chuàng)建Android庫的方法及Android中 .aar文件生成方法與用法詳解,涉及到創(chuàng)建庫模塊操作步驟及開發(fā)注意事項,需要的朋友參考下吧
    2017-12-12
  • android AsyncTask詳細介紹

    android AsyncTask詳細介紹

    本篇文章主要主要介紹了AsyncTask介紹,AsyncTask,是android提供的輕量級的異步類,有興趣的同學可以了解一下。
    2016-11-11
  • 詳解App相互喚醒的幾種方式

    詳解App相互喚醒的幾種方式

    這篇文章主要介紹了Android App相互喚醒的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Android系統(tǒng)實現(xiàn)DroidPlugin插件機制

    Android系統(tǒng)實現(xiàn)DroidPlugin插件機制

    這篇文章主要為大家詳細介紹了Android系統(tǒng)上實現(xiàn)DroidPlugin插件機制,可以在無需安裝、修改的情況下運行APK文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android實現(xiàn)調(diào)用攝像頭進行拍照功能

    Android實現(xiàn)調(diào)用攝像頭進行拍照功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)調(diào)用攝像頭進行拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Android  CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

    Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使

    這篇文章主要介紹了Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用的相關資料,需要的朋友可以參考下
    2016-12-12

最新評論

若羌县| 玉龙| 巴东县| 扎囊县| 屯留县| 沾化县| 墨竹工卡县| 马公市| 西乌珠穆沁旗| 客服| 玛曲县| 肃南| 台州市| 四川省| 大竹县| 乌鲁木齐县| 太白县| 云安县| 崇文区| 应城市| 闽清县| 禹城市| 灵山县| 星座| 五大连池市| 和林格尔县| 贵阳市| 会宁县| 正镶白旗| 中牟县| 泗水县| 建阳市| 青浦区| 盐山县| 疏勒县| 石渠县| 秦安县| 蓝山县| 合山市| 永兴县| 开化县|