一步一步实现ListView加载网络数据,下滑底部加载,顶部下拉刷新,安卓面试项目源码

本文介绍如何在Android应用中实现ListView加载网络数据,同时支持下拉刷新和上拉加载更多功能。通过创建自定义Adapter和使用ImageLoader,详细讲解了数据获取、图片加载优化及界面交互的实现过程,适合安卓开发者面试准备和项目实践。
摘要由CSDN通过智能技术生成

private RefreshListView mListView;

private Context mContext;

// 网络图片加载

public List getDatas() {

return mDatas;

}

public void setDatas(List mDatas) {

this.mDatas = mDatas;

}

public void setData(int pos, NewsBean bean) {

if (-1 != pos) {

mDatas.add(pos, bean);

MainActivity.urls.add(pos, bean.NewsPicResUrl);

} else {

mDatas.add(bean);

MainActivity.urls.add(bean.NewsPicResUrl);

}

}

private ImageLoader mImageLoader;

public NewsAdapter(Context context, List mDatas, RefreshListView listView) {

super();

mContext = context;

this.mDatas = mDatas;

this.mInflater = LayoutInflater.from(context);

//抽象成单例后改写 begin

//mImageLoader = new ImageLoader(listView); mImageLoader = ImageLoader.getInstance(context);

mImageLoader.setmListView(listView);

//抽象成单例后改写 end

mListView = listView;

initHeaderView();

initFooterView();

}

private void initFooterView() {

mFooterView = mListView.getFooterView();

}

//下拉刷新数据

public void onDateChange(List mDatas) {

this.mDatas = mDatas;

this.notifyDataSetChanged();

}

//下拉刷新数据

private void initHeaderView() {

headerView = mListView.findViewById(R.id.headerview);

// 获取View高度

headerHeight = mListView.getHeaderHeight();

mTipView = (TextView) headerView.findViewById(R.id.tip);

mTimeView = (TextView) headerView.findViewById(R.id.lastupdate_time);

mArrowView = (ImageView) headerView.findViewById(R.id.arrow);

mBar = (ProgressBar) headerView.findViewById(R.id.progress);

}

@Override

public int getCount() {

if (mDatas != null)

return mDatas.size();

return 0;

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return mDatas.get(position);

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {

//Log.i(TAG, “getView->缓存为空:” + position);

holder = new ViewHolder();

convertView = mInflater.inflate(R.layout.item, parent, false);

holder.pic = (ImageView) convertView.findViewById(R.id.iv_pic);

holder.no = (TextView) convertView.findViewById(R.id.tv_no);

holder.name = (TextView) convertView.findViewById(R.id.tv_name);

holder.description = (TextView) convertView

.findViewById(R.id.tv_description);

convertView.setTag(holder);

} else {

//Log.i(TAG, “getView->缓存过:” + position);

holder = (ViewHolder) convertView.getTag();

}

NewsBean bean = mDatas.get(position);

// 加载网络图片

holder.pic.setTag(bean.NewsPicResUrl);

// mImageLoader.getImageByAsyncTask(holder.pic, bean.NewsPicResUrl);

holder.pic.setImageResource(R.drawable.ic_launcher);

// 滑动优化 如果有缓存,则加载 否则不加载

final Bitmap pBitmap = mImageLoader.setDefaultBitmap(holder.pic, bean.NewsPicResUrl);

// /滑动优化

holder.name.setText(bean.NewsName);

holder.description.setText(bean.NewsDescription);

holder.no.setText(bean.NewsNo);

//添加事件点击 2015 12 24

final String urlBig = bean.NewsPicBigResUrl;

final String urlSmall = bean.NewsPicResUrl;

holder.pic.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(v.getContext(), “bean.NewsNo:” + urlBig, Toast.LENGTH_SHORT).show();

Intent intent = new Intent(mContext, BigImageActivity.class);

intent.putExtra(“urlBig”, urlBig);

intent.putExtra(“urlSmall”, urlSmall);

mContext.startActivity(intent);

}

});

//

return convertView;

}

class ViewHolder {

public ImageView pic;

public TextView name;

public TextView description;

public TextView no;

}

// 滚动时的优化 begin

private int mStart, mEnd;

@Override

public void onScrollStateChanged(AbsListView view, int scrollState) {

if (scrollState == SCROLL_STATE_IDLE) {

Log.i(TAG, “scrollState:” + mStart + “-” + mEnd);

loadImages();

} else {

Log.i(TAG, “scrollState cancel:”);

mImageLoader.cancelAllTasks();

}

}

private void loadImages() {

if (null != mDatas && mDatas.size() > 0) {

//修复bug 滑动时边缘不加载 begin

int start = mStart != 0 ? mStart - 1 : 0;

int end = mEnd != mDatas.size() ? mEnd + 1 : mEnd;

//修复bug 滑动时边缘不加载 end

mImageLoad

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值