关于listview多个界面的问题

本文介绍如何使用自定义适配器在Android应用中实现新闻列表的高效展示,包括图片加载、数据类型判断及布局切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.adapter;


import java.util.List;


import com.example.myinfo.MyNewsInfo;
import com.example.utils.LoadImg;
import com.example.utils.LoadImg.ImageDownloadCallBack;
import com.example.weixinpublicnumber.R;


import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;


public class MyAdapter extends BaseAdapter {


private Context ctx;
private List<MyNewsInfo> list;
private LoadImg loadImg;
private String url = "http://534429149.haoqie.net/qiubai/Userimg/";


public MyAdapter(Context ctx, List<MyNewsInfo> list) {
this.ctx = ctx;
this.list = list;
// 实例化获取图片的类
loadImg = new LoadImg(ctx);
}


@Override
public int getItemViewType(int position) {
if (list.get(position).getType().equals("1")) {
return 0;
} else {
return 1;
}
}


@Override
public int getViewTypeCount() {
// 因为有两种视图,所以返回2
return 2;
}


@Override
public int getCount() {
return list.size();
}


@Override
public Object getItem(int arg0) {
return list.get(arg0);
}


@Override
public long getItemId(int arg0) {
return arg0;
}


@Override
public View getView(final int arg0, View arg1, ViewGroup arg2) {
final Holder hold;
if (arg1 == null) {
hold = new Holder();
if (getItemViewType(arg0) == 0) {
arg1 = View.inflate(ctx, R.layout.mylistview_item_one, null);
hold.text = (TextView) arg1
.findViewById(R.id.mylistview_item_text);
hold.img = (ImageView) arg1
.findViewById(R.id.mylistview_item_img);
} else if (getItemViewType(arg0) == 1) {
arg1 = View.inflate(ctx, R.layout.mylistview_item_two, null);
hold.text = (TextView) arg1
.findViewById(R.id.mylistview_item_text);
hold.img = (ImageView) arg1
.findViewById(R.id.mylistview_item_img);
hold.listBottomMargin = (RelativeLayout) arg1
.findViewById(R.id.listBottomMargin);
}


arg1.setTag(hold);
} else {
hold = (Holder) arg1.getTag();
}


hold.text.setText(list.get(arg0).getText());
if (arg0 == list.size() - 1) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 16);
hold.listBottomMargin.setLayoutParams(params);
}


// 设置默认显示的图片
hold.img.setImageDrawable(null);
// 网络获取图片
Log.e("liuxiaowei", url + list.get(arg0).getImg());
hold.img.setTag(url + list.get(arg0).getImg());
Bitmap bit = loadImg.loadImage(hold.img, url + list.get(arg0).getImg(),
new ImageDownloadCallBack() {
public void onImageDownload(ImageView imageView,
Bitmap bitmap) {
// 网络交互时回调进来防止错位
if (hold.img.getTag().equals(
url + list.get(arg0).getImg())) {
// 设置网络下载回来图片显示
hold.img.setImageBitmap(bitmap);
}
}
});
// 从本地获取的
if (bit != null) {
// 设置缓存图片显示
hold.img.setImageBitmap(bit);
}


return arg1;
}


static class Holder {
TextView text;
ImageView img;
RelativeLayout listBottomMargin;
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值