gpt4 book ai didi

java - 如何使用 View 持有者模式制作自定义适配器?

转载 作者:行者123 更新时间:2023-11-29 19:27:11 26 4
gpt4 key购买 nike

我有这个用于图像的自定义适配器,我想更改它以便在其中包含 View 持有者模式。任何人都可以帮助弄清楚如何更改我的代码,以便在可能的情况下在其中包含 View Holder 模式吗?

public class ImageAdapter extends BaseAdapter {

private final int imageTotal;
private ArrayList<String> urlList = new ArrayList<>();
private final Context mContext;

public ImageAdapter(Context context, ArrayList<String> uList) {
mContext = context;
urlList = uList;
imageTotal = uList.size();
}

public int getCount() {
return imageTotal;
}

@Override
public String getItem(int position) {
return urlList.get(position);
}

public long getItemId(int position) {
return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setAdjustViewBounds(true);
} else {
imageView = (ImageView) convertView;
}
String url = getItem(position);

Picasso.with(mContext)
.load(url)
.placeholder(R.drawable.loader)
.fit()
.into(imageView);
return imageView;
}

最佳答案

您只是将 View 用作 ImageView,因此 ViewHolder 模式没有意义。

但假设您需要向 View 添加一个 TextView,那么您将需要创建一个自定义布局文件,其中包含一个 ImageView(我们将其 id 定义为 R.id.image)和一个 TextView(我们将其 id 定义为R.id.文本)。

因此您的代码将如下所示:(我将省略未更改的部分)

public class ImageAdapter extends BaseAdapter {

static class ViewHolder {
ImageView image;
TextView text;

ViewHolder(View v) {
image = v.findViewById(R.id.image);
text = v.findViewById(R.id.text);
}
}

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, parent, false);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String url = getItem(position);

Picasso.with(mContext)
.load(url)
.placeholder(R.drawable.loader)
.fit()
.into(viewHolder.image);
viewHolder.text.setText("my text");
return imageView;
}
}

ViewHolder 背后的想法是避免重新绑定(bind)。分离行为也很有用。

但是正如@cricket_007 所评论的那样,您应该使用 RecyclerView 来强制您使用 ViewHolder :)

关于java - 如何使用 View 持有者模式制作自定义适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com