android如何使自定义 adapter 与 view 持有人模式吗?

标签: Java Android
发布时间: 2017/3/19 13:20:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这种风俗 adapter 图像,我想更改,以便它将有 view 持有模式在它可以任何人请帮助来找出如何改变我的代码,因此,它具有 View 持有模式在它,如果它是可能根本吗?

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;
}

}

解决方法 1:

您正在使用您 view 只是 ImageView ,所以 ViewHolder 模式没有任何意义。

但是,假设您需要添加 TextViewview ,所以您将需要创建一个自定义 layout 文件与 ImageView (让我们定义它的 id 为 R.id.image) 和 TextView (让我们定义它的 id 为 R.id.text)。

所以您的代码将如下所示: (我将省略的不变的部分)

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 背后的想法是避免重新绑定。它也是有用的分离行为。

但是正如 @cricket_007 的评论,你应该使用 RecyclerView 强制您对 ViewHolder:)

官方微信
官方QQ群
31647020