Android 自定义适配器从不为空
我有一个Android 自定义适配器从不为空,android,listview,baseadapter,custom-adapter,onscrolllistener,Android,Listview,Baseadapter,Custom Adapter,Onscrolllistener,我有一个自定义适配器,它用从服务器获取的数据填充自定义列表视图。我想要的是检查adapter是否为空,并将数据附加到listview中,如果为空,则用数据填充listview,并notifyDataSetChanged。我正在实现OnScrollListener以从服务器加载更多数据。但是adapter从不为空,并且始终调用notifyDataSetChanged 我的列表活动 public class ListResultActivity extends Activity implements
自定义适配器
,它用从服务器获取的数据填充自定义列表视图
。我想要的是检查adapter
是否为空,并将数据附加到listview
中,如果为空,则用数据填充listview
,并notifyDataSetChanged
。我正在实现OnScrollListener
以从服务器加载更多数据。但是adapter
从不为空,并且始终调用notifyDataSetChanged
我的列表活动
public class ListResultActivity extends Activity implements OnScrollListener{
private ArrayList<BusinessListData> businesses;
private ListView businessList;
private LayoutInflater layoutInflator;
private BusinessListIconTask imgFetcher;
BusinessListDataAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.businesslist);
this.businessList = (ListView) findViewById(R.id.lvBusinesslist);
this.adapter= new BusinessListDataAdapter(this,
this.imgFetcher, this.layoutInflator, this.businesses);
getData();
businessList.setOnScrollListener(this);
}
@Override
public Object onRetainNonConfigurationInstance() {
Object[] myStuff = new Object[2];
myStuff[0] = this.businesses;
myStuff[1] = this.imgFetcher;
return myStuff;
}
/**
* Bundle to hold refs to row items views.
*
*/
public static class MyViewHolder {
public TextView businessName, businessAddress, phoneNo;
public Button btnProfile;
public ImageView icon;
public BusinessListData business;
}
public void setBusinesses(ArrayList<BusinessListData> businesses) {
this.imgFetcher = new BusinessListIconTask(this);
this.layoutInflator = LayoutInflater.from(this);
this.businesses = businesses;
if(adapter !=null){
this.adapter.notifyDataSetChanged();
}else{
this.adapter= new BusinessListDataAdapter(this,
this.imgFetcher, this.layoutInflator, this.businesses);
businessList.setAdapter(adapter);
}
}
private void getData() {
// TODO Auto-generated method stub
Intent myIntent = getIntent();
// gets the arguments from previously created intent
String metroTxt = myIntent.getStringExtra("key");
String metroLoc = myIntent.getStringExtra("loc");
String metroId = myIntent.getStringExtra("qt");
BusinessListApiTask spTask = new BusinessListApiTask(
ListResultActivity.this);
try {
spTask.execute(metroTxt, metroLoc, metroId);
} catch (Exception e) {
spTask.cancel(true);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
if (businessList.getLastVisiblePosition() == totalItemCount - 1) {
getData();
adapter.notifyDataSetChanged();
Log.d("test count", "abc"+totalItemCount);
}
}
公共类ListResultActivity扩展了活动在CrollListener上的实现{
私营企业;
私有列表视图业务列表;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私营企业Listicontask imgFetcher;
BusinessListDataAdapter;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.businesslist);
this.businessList=(ListView)findViewById(R.id.lvBusinesslist);
this.adapter=新的BusinessListDataAdapter(此,
this.imgFetcher,this.layoutinor,this.business);
getData();
businessList.setOnScrollListener(这个);
}
@凌驾
公共对象OnRetainOnConfiguration实例(){
Object[]myStuff=新对象[2];
myStuff[0]=this.business;
myStuff[1]=this.imgFetcher;
返回我的凝灰岩;
}
/**
*捆绑以保存行项目视图的引用。
*
*/
公共静态类MyViewHolder{
公共文本查看业务名称、业务地址、电话号码;
公共按钮BTN配置文件;
公共图像视图图标;
公共业务列表数据业务;
}
公共业务(ArrayList业务){
this.imgFetcher=new BusinessListIconTask(this);
this.layoutInflator=LayoutInflater.from(this);
这是商业=商业;
if(适配器!=null){
this.adapter.notifyDataSetChanged();
}否则{
this.adapter=新的BusinessListDataAdapter(此,
this.imgFetcher,this.layoutinor,this.business);
businessList.setAdapter(适配器);
}
}
私有void getData(){
//TODO自动生成的方法存根
Intent myIntent=getIntent();
//从以前创建的意图获取参数
字符串metroText=myIntent.getStringExtra(“键”);
String metroLoc=myIntent.getStringExtra(“loc”);
String metroId=myIntent.getStringExtra(“qt”);
BusinessListApiTask spTask=新建BusinessListApiTask(
ListResultActivity.this);
试一试{
执行(MetroText、metroLoc、metroId);
}捕获(例外e){
spTask.cancel(true);
}
}
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
//TODO自动生成的方法存根
}
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
//TODO自动生成的方法存根
if(businessList.getLastVisiblePosition()==totalItemCount-1){
getData();
adapter.notifyDataSetChanged();
Log.d(“测试计数”、“abc”+totalItemCount);
}
}
}
类从服务器获取数据并设置为适配器
public class BusinessListApiTask extends AsyncTask<String, Integer, String> {
private ProgressDialog progDialog;
private Context context;
private ListResultActivity activity;
private static final String debugTag = "sodhpuch";
HashMap<String, String> queryValues;
/**
* Construct a task
*
* @param activity
*/
public BusinessListApiTask(ListResultActivity activity) {
// TODO Auto-generated constructor stub
super();
this.activity = activity;
this.context = this.activity.getApplicationContext();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progDialog = ProgressDialog.show(this.activity, "Search", this.context
.getResources().getString(R.string.looking_for_business), true,
false);
}
@Override
protected String doInBackground(String... params) {
try {
// Log.d(debugTag, "Background:" +
// Thread.currentThread().getName());
String result = BusinessListHelper.downloadFromServer(params);
// try {
//
// updateSQLite(result);
//
// } catch (Exception e) {
// return result;
// }
Log.d("result", result);
return result;
} catch (Exception e) {
return new String();
}
}
@Override
protected void onPostExecute(String result) {
ArrayList<BusinessListData> businessData = new ArrayList<BusinessListData>();
progDialog.dismiss();
try {
JSONObject respObj = new JSONObject(result);
int success = respObj.getInt("success");
Log.d("Success", "abc"+success);
if (success == 1) {
JSONArray tracks = respObj.getJSONArray("idioms");
for (int i = 0; i < tracks.length(); i++) {
JSONObject track = tracks.getJSONObject(i);
String businessName = track.getString("name");
String businessAddress = track.getString("address");
String phone = track.getString("phone");
String id = track.getString("id");
String deals_in = track.getString("deals_in");
businessData.add(new BusinessListData(businessName,
businessAddress, id, phone, deals_in));
}
} else {
Log.d("Success", "first"+success);
// Log.d(debugTag, "Background:" + result);
// DBController controller = new DBController(context);
// businessData = controller.getBusinessList();
return ;
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// }
this.activity.setBusinesses(businessData);
}
公共类BusinessListApiTask扩展了AsyncTask{
私有进程对话;
私人语境;
私人活动;
私有静态最终字符串debugTag=“sodhpuch”;
HashMap查询值;
/**
*构造任务
*
*@param活动
*/
public BusinessListApiTask(ListResultActivity活动){
//TODO自动生成的构造函数存根
超级();
这个。活动=活动;
this.context=this.activity.getApplicationContext();
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progDialog=ProgressDialog.show(this.activity,“Search”,this.context
.getResources().getString(R.string.looking_for_business),true,
假);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
//Log.d(debugTag,“背景:”+
//Thread.currentThread().getName());
字符串结果=BusinessListHelper.downloadFromServer(参数);
//试一试{
//
//更新Qlite(结果);
//
//}catch(异常e){
//返回结果;
// }
Log.d(“结果”,结果);
返回结果;
}捕获(例外e){
返回新字符串();
}
}
@凌驾
受保护的void onPostExecute(字符串结果){
ArrayList businessData=新建ArrayList();
progDialog.discouse();
试一试{
JSONObject respObj=新JSONObject(结果);
int success=respObj.getInt(“success”);
日志d(“成功”,“abc”+成功);
如果(成功==1){
JSONArray tracks=respObj.getJSONArray(“习语”);
对于(int i=0;i
我的适配器
public class BusinessListDataAdapter extends BaseAdapter implements
OnClickListener {
private static final String debugTag = "BusinessListDataAdapter";
private ListResultActivity activity;
private BusinessListIconTask imgFetcher;
private LayoutInflater layoutInflater;
private ArrayList<BusinessListData> businesses;
BusinessListData business;
public BusinessListDataAdapter(ListResultActivity a,
BusinessListIconTask i, LayoutInflater l,
ArrayList<BusinessListData> data) {
this.activity = a;
this.imgFetcher = i;
this.layoutInflater = l;
this.businesses = data;
}
@Override
public int getCount() {
return this.businesses.size();
}
public void clear()
{
businesses.clear();
notifyDataSetChanged();
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int pos) {
return pos;
}
@Override
public View getView(int pos, View convertView, ViewGroup parent) {
MyViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.trackrow, parent,
false);
holder = new MyViewHolder();
holder.businessName = (TextView) convertView
.findViewById(R.id.tvBusinessName);
holder.businessAddress = (TextView) convertView
.findViewById(R.id.tvAddress);
holder.phoneNo = (TextView) convertView.findViewById(R.id.tvPhone);
holder.icon = (ImageView) convertView.findViewById(R.id.album_icon);
holder.btnProfile = (Button) convertView
.findViewById(R.id.btnProfile);
holder.btnProfile.setTag(holder);
convertView.setTag(holder);
} else {
holder = (MyViewHolder) convertView.getTag();
}
convertView.setOnClickListener(this);
business= businesses.get(pos);
holder.business = business;
holder.businessName.setText(business.getName());
holder.businessAddress.setText(business.getAddress());
holder.phoneNo.setText(business.getPhone());
holder.btnProfile.setOnClickListener(this);
// if(track.getImageUrl() != null) {
// holder.icon.setTag(track.getImageUrl());
// Drawable dr = imgFetcher.loadImage(this, holder.icon);
// if(dr != null) {
// holder.icon.setImageDrawable(dr);
// }
// } else {
holder.icon.setImageResource(R.drawable.filler_icon);
// }
return convertView;
}
@Override
public void onClick(View v) {
String deals_in = business.getDeals().toString();
Log.d("name", deals_in);
MyViewHolder holder = (MyViewHolder) v.getTag();
if (v instanceof Button) {
Intent profile = new Intent(activity,
ProfileActivity.class);
profile.putExtra("deals_in", deals_in);
profile.putExtra("phone", holder.business.getPhone());
profile.putExtra("address", holder.business.getAddress());
profile.putExtra("name", holder.business.getName());
this.activity.startActivity(profile);
} else if (v instanceof View) {
Log.d("test","call testing");
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" +holder.business.getPhone()));
this.activity.startActivity(intent);
}
Log.d(debugTag, "OnClick pressed.");
}
公共类BusinessListDataAdapter扩展BaseAdapter实现
onclick侦听器{
私有静态最终字符串debugTag=“BusinessListDataAdapter”;
私有ListResultActivity
if(adapter !=null && adapter.getCount()>0)
{
this.adapter.notifyDataSetChanged();
}
else
{
this.adapter= new BusinessListDataAdapter(this,
this.imgFetcher, this.layoutInflator, this.businesses);
businessList.setAdapter(adapter);
}
public void setBusinesses(ArrayList<BusinessListData> businesses) {
imgFetcher = new BusinessListIconTask(this);
layoutInflator = LayoutInflater.from(this);
if(this.businesses == null || adapter==null){
this.businesses = new ArrayList<BusinessListData>();
adapter= new BusinessListDataAdapter(this,imgFetcher,layoutInflator,this.businesses);
businessList.setAdapter(adapter);
}
this.businesses.addAll(businesses);
adapter.notifyDataSetChanged();
}