You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过Array Adapter在列表中显示固定缩略图?使用Volley填充列表

当然可以!用ArrayAdapter在ListView显示固定缩略图的实现方案

核心思路

因为缩略图是固定的同一张,我们完全不需要每次去网络加载,直接用本地资源即可——只需要在自定义ArrayAdapter里给每个列表项的ImageView设置这张图,再结合Volley拉取的动态数据填充文本内容就搞定了。

具体步骤

  1. 准备固定缩略图资源
    把你的缩略图放到项目的res/drawable目录下,比如命名为ic_fixed_thumb.png。

  2. 创建列表项布局
    新建一个list_item.xml布局文件,包含显示缩略图的ImageView和显示Volley数据的TextView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/iv_thumb"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:scaleType="centerCrop"/>

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:gravity="center_vertical"/>
</LinearLayout>
  1. 自定义ArrayAdapter
    继承ArrayAdapter,用ViewHolder模式优化性能,在getView方法里直接给ImageView设置固定的本地图片:
public class CustomListAdapter extends ArrayAdapter<String> {
    private Context mContext;
    private List<String> mDataList;

    public CustomListAdapter(Context context, List<String> dataList) {
        super(context, 0, dataList);
        mContext = context;
        mDataList = dataList;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
            holder = new ViewHolder();
            holder.thumbImageView = convertView.findViewById(R.id.iv_thumb);
            holder.contentTextView = convertView.findViewById(R.id.tv_content);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // 设置固定缩略图
        holder.thumbImageView.setImageResource(R.drawable.ic_fixed_thumb);
        // 设置Volley拉取的动态数据
        holder.contentTextView.setText(mDataList.get(position));

        return convertView;
    }

    static class ViewHolder {
        ImageView thumbImageView;
        TextView contentTextView;
    }
}
  1. 结合Volley加载数据并更新列表
    在Activity/Fragment里初始化ListView和Adapter,用Volley发起请求获取数据后,更新Adapter的数据集并刷新:
public class MainActivity extends AppCompatActivity {
    private ListView mListView;
    private CustomListAdapter mAdapter;
    private List<String> mData = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mListView = findViewById(R.id.list_view);
        mAdapter = new CustomListAdapter(this, mData);
        mListView.setAdapter(mAdapter);

        // 用Volley请求数据
        StringRequest stringRequest = new StringRequest(Request.Method.GET, "你的数据接口URL",
                response -> {
                    // 解析返回的response,把数据添加到mData里
                    // 示例:假设返回的是逗号分隔的字符串
                    String[] items = response.split(",");
                    mData.addAll(Arrays.asList(items));
                    // 通知Adapter数据更新
                    mAdapter.notifyDataSetChanged();
                },
                error -> {
                    // 处理请求错误
                    Toast.makeText(MainActivity.this, "数据加载失败", Toast.LENGTH_SHORT).show();
                });

        // 获取Volley的RequestQueue并添加请求
        Volley.newRequestQueue(this).add(stringRequest);
    }
}

小提示

  • 因为缩略图是本地固定资源,直接用setImageResource比用图片加载框架(比如Glide)更高效,不需要额外的异步加载。
  • ViewHolder模式一定要用,避免每次getView都重复findViewById,提升ListView的滚动流畅度。

内容的提问来源于stack exchange,提问作者farjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:19:19