1.List a = new ArrayList();
2.a = JsonUtils.parseJsonArray();
很普通,没毛病。
可是当你设置的关联的adapter是SimpleAdapter而不是BaseAdapter时就苦逼了,再怎么notifyDataSetChanged()也没用,就是不能显示数据。
因为SimPleAdapter此时关联的集合指向的是new的集合,后来的是重新指向的,所以此时的集合改变并不会引起重绘,如果是BaseAdapter就可以,每次都会重绘,前提是使用的集合必须是改变着的那个
初始化:
//固定的项的数据集合 private List<HashMap<String,Object>> mStickItemData = new ArrayList<>(); //可拖动的GridView的数据集合 private List<HashMap<String, Object>> mHasSelectedData = new ArrayList<>(); //不可拖动的GridView的数据集合 private List<HashMap<String, Object>> mAddDataList = new ArrayList<>();适配器:
private class MyDragAdapter extends DragAdapter{ // private List<HashMap<String, Object>> mList ; public MyDragAdapter(Context context, List<HashMap<String, Object>> list) { super(context, list); } @Override public int getCount() { return mHasSelectedData.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { super.getView(position,convertView,parent); convertView = View.inflate(CategoryOrder.this,R.layout.grid_item, null); TextView mTextView = (TextView) convertView.findViewById(R.id.item_text); mTextView.setText((String) mHasSelectedData.get(position).get("name")); //前?个固定(背景色改变不一样) if (position < CategoryOrder.SETTLED_ITEM_NUM) { convertView.setEnabled(false); } return convertView; } }像这个,构造方法里的集合是初始化的时候传进来的,只是个中间集合,并不是最初的时刻改变的集合,表面上他确实是指向他的,可是经实践,初始的集合再怎么改变,notifyDataSetChanged()之后并不会执行getView方法!因为能够引起重绘的必须是初始的那个集合,不能是中间指向。(上文是我已经改好的)
再重新赋值(指向)之后,要调用addAll把数据传给初始集合,这样就行了。我想这也是addAll()方法存在的意义吧,否则如果可以直接赋指向的话那为什么还需要有这个方法?顿时好像明白了什么,可是具体什么原理并不清楚。
附解析数据代码:
public void getCategoryData() { //调接口 new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { final JSONObject jsobj = BaseDataService.getCategoryData(UserInfo.USER_ID); int code = jsobj.getInt("code"); if (code == 100) { mStickItemData = JsonUtils.parseJsonArray(jsobj.getJSONArray("results")); SETTLED_ITEM_NUM = mStickItemData.size() ; List li = JsonUtils.parseJsonArray(jsobj.getJSONArray("results2")); mHasSelectedData.addAll(li); for (int i = 0; i < mStickItemData.size(); i++) { HashMap map = mStickItemData.get(i); mHasSelectedData.add(i,map); } List ll = JsonUtils.parseJsonArray(jsobj.getJSONArray("results3")); mAddDataList.addAll(ll); //更新UI runOnUiThread(new Runnable() { @Override public void run() { mDragAdapter.notifyDataSetChanged(); mSimpleAdapter.notifyDataSetChanged(); } }); } else { } } catch (NetConnectionException e) { //服务器未开或者其他服务器原因引起 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(TheApplication.getContext(), "服务器链接异常", Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } catch (JSONException e) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(TheApplication.getContext(), "Json解析错误", Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } finally { } } }).start(); }