notifyDataSetChanged()刷新ListView(使用JSONArray绑定的Adapter)

1.fragment代码:

package com.ts.fragment;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.Random;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import com.example.mywinxintest.R;

import com.ts.fragment.AutoListView;

import com.ts.fragment.AutoListView.OnLoadListener;

import com.ts.fragment.AutoListView.OnRefreshListener;

import com.ts.myst.JSONArrayAdapter;

import com.ts.util.HttpUtil;

import android.annotation.SuppressLint;

import android.graphics.Paint;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.v4.app.Fragment;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemSelectedListener;

import android.widget.ListView;

import android.widget.Spinner;

import android.widget.TextView;

public class SearchFragment extends Fragment implements OnRefreshListener,

OnLoadListener

{

Spinner areaSpinner;

TextView searchTextView;

ListView itemListView;

Map<String, String> countMap = new HashMap<String, String>();

String url1 = HttpUtil.BASE_URL+"asset_findAssetArea.action";

String url2 = HttpUtil.BASE_URL+"asset_findAssetSB.action";

String url3 = HttpUtil.BASE_URL+"asset_findAssetSBCount.action";

private AutoListView lstv;

private JSONArrayAdapter jsonArrayAdapter;

private JSONArray itemJsonArray = new JSONArray();

private String areaId;

private Handler handler = new Handler(){

@SuppressLint("NewApi")

public void handleMessage(Message msg) {

String result = (String) msg.obj;

JSONArray resultJsonArray = null;

try {

resultJsonArray = new JSONArray(result);

} catch (JSONException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

switch (msg.what) {

case AutoListView.REFRESH:

lstv.onRefreshComplete();

try {

for (int i = 0; i < itemJsonArray.length(); i++) {

itemJsonArray.remove(i);

}

for (int i = 0; i < resultJsonArray.length(); i++) {

itemJsonArray.put(resultJsonArray.get(i));

}

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

break;

case AutoListView.LOAD:

lstv.onLoadComplete();

for (int i = 0; i < resultJsonArray.length(); i++) {

try {

itemJsonArray.put(resultJsonArray.get(i));

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

break;

}

lstv.setResultSize(resultJsonArray.length());

jsonArrayAdapter.notifyDataSetChanged();

};

};

@Override

public View onCreateView(LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState)

{

View v = inflater.inflate(R.layout.search_fragment, null) ;

lstv = (AutoListView) v.findViewById(R.id.lstv);

try{

itemJsonArray = new JSONArray("[]");

jsonArrayAdapter = new JSONArrayAdapter(getActivity(), itemJsonArray, "assetCode_assetName_assetSyr", false, "3");

// itemListView.setAdapter(adapter2);

lstv.setAdapter(jsonArrayAdapter);

lstv.setOnRefreshListener(this);

lstv.setOnLoadListener(this);

initData(areaId);

@Override

public void onNothingSelected(AdapterView<?

> parent) {

// TODO Auto-generated method stub

}

});

}

catch(Exception e){

e.printStackTrace();

}

return v ;

}

private void initData(String areaId) {

loadData(AutoListView.REFRESH,areaId);

}

private void loadData(final int what, final String areaId) {

new Thread(new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

try {

Thread.sleep(700);

} catch (InterruptedException e) {

e.printStackTrace();

}

Message msg = handler.obtainMessage();

msg.what = what;

try {

msg.obj = <span style="font-family: Arial, Helvetica, sans-serif;">getData(areaId) <span style="font-family: Arial, Helvetica, sans-serif;">;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

handler.sendMessage(msg);

}

}).start();

}

@Override

public void onLoad() {

// TODO Auto-generated method stub

loadData(AutoListView.LOAD,areaId);

}

@Override

public void onRefresh() {

// TODO Auto-generated method stub

loadData(AutoListView.REFRESH,areaId);

}

// 測试数据

public String getData(String areaId) {

String result = null;

try {

result = HttpUtil.postRequest(url2, countMap);//通过server获取数据

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return result;

}

}

时间: 2024-10-15 09:02:18

notifyDataSetChanged()刷新ListView(使用JSONArray绑定的Adapter)的相关文章

关于ListView中notifyDataSetChanged()刷新数据不更新原因

使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据. 这时候就要注意了: ...... private ArrayList<HashMap<String, Object>> usersList; ...... usersList= query(......);     //根据查询函数获取一个ArrayList并赋值给绑定到Adapter的数据源us

【转】关于ListView中notifyDataSetChanged()刷新数据不更新原因

使用Listview的时候: 当要动态显示更改后的数据(例如数据库改动), 很多人应该都用过notifyDataSetChanged();这个方法来刷新Listview,显示改后的数据. 这时候就要注意了:                  ......                  private ArrayList<HashMap<String, Object>> usersList;                  ......                  use

ListView中notifyDataSetChanged()刷新数据不更新原因分析

情景分析: 在开发过程中,我们经常会使用notifyDataSetChanged()实时的让ListView进行刷新操作,但是有的时候却会发现ListView不再刷新了,有的时候却又可以自动刷新. 原因分析: 如上图所示,传递给Adapter的List引用一开始为引用a,但是,当我们在程序中执行刷新更换数据的时候,如果一不小心将List的引用换成了引用b的话,就会导致上述情景的发生.那是因为Adapter刷新的时候,还是用得引用a的数据,而不是引用b: 解决思路: 思路1: 在Adapter中为

Android SwipeRefreshLayout 官方下拉刷新控件介绍—Handler原理—Adapter总结

參考博客:http://blog.csdn.net/lmj623565791/article/details/24521483 自己敲了下代码,这个方式刷新确实给人耳目一新的感觉.资源:含有两个SwipeRefreshLayout实战的Demo,http://download.csdn.net/detail/itjavawfc/8847339 用起来很好用:看看文档几个重要的方法,简单拿来用没有不论什么问题. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZX

【Android】从源码分析PagerAdapter/FragmentPagerAdapter调用notifydataSetChanged()刷新的原理

相信用过viewpager的同学都会遇到调用notifydataSetChanged()后不刷新或者不符合预期的问题,今天就来分析分析这里的来龙去脉.这一切还得从viewpager的setAdapter说起: /** * Set a PagerAdapter that will supply views for this pager as needed. * * @param adapter Adapter to use */ public void setAdapter(PagerAdapte

C# Winform 关于ListView控件绑定DataTable

今天用到ListView控件,这里总结一下ListView控件绑定DataTable的方法 下面需要特别注意的是,绑定的过程中实现绑定控件的column的属性,再进行item的绑定. 与DataGridView不同的是,不能直接使用DataSourse绑定, 再者,绑定第一个Items的时候一定要实例化一个Item进行单独绑定,因为第一个Item与后面的不用即Item与SubItem的区别,下面的代码中也给出了相应的注释 [csharp] view plain copy private void

关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法

文章转载自:关于调用notifyDataSetChanged刷新PullToRefreshListView列表无反应解决办法 | TeachCourse

ListView控件绑定DataSet

DataSet数据集,数据缓存在客户端内存中,支持断开式连接. 在对DataSet做操作的时候,首先一定要修改其行的状态,然后执行SqlDataAdapter的Update方法,Update方法根据其行的状态,做相应的SelectCommand.DeleteCommand.UpdateCommand.InsertCommand操作. 一,ListView控件绑定DataSet之操作: 1)查找操作 using (SqlConnection con = new SqlConnection(cons

ListView系列(七)——Adapter内的onItemClick监听器四个arg参数 (转)

举个例子你会理解的更快:X, Y两个listview,X里有1,2,3,4这4个item,Y里有a,b,c,d这4个item.如果你点了b这个item.如下: public void onItemClick (AdapterView<?> parent, View view, int position, long id )// parent 相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X - -// view 是你点b