欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

本文實(shí)例講述了android中ListView數(shù)據(jù)刷新時(shí)的同步方法。分享給大家供大家參考。具體實(shí)現(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);   
  // 異步對(duì)比服務(wù)器分組和本地分組 
  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() { 
  // 詳細(xì)的更新 
  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; 
  } 
 } 
}

代碼只是提取的部分,應(yīng)該沒(méi)多大影響.

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

=>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.

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

Message.obj = groupList;

額,改好后測(cè)試多次,發(fā)現(xiàn)這兩問(wèn)題都解決了,發(fā)現(xiàn)還是對(duì)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);   
 // 異步對(duì)比服務(wù)器分組和本地分組 
 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) { 
 // 詳細(xì)的更新 
 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); 
 } 
}

希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論