Android Studio中如何修改ArrayAdapter的列表显示文本内容
问题原因
你遇到的显示异常是因为ArrayAdapter使用系统自带的android.R.layout.simple_list_item_1布局时,默认会调用列表项对应对象的toString()方法获取文本内容填充到布局的TextView中。你没有重写ProductModel类的toString()方法,系统默认会输出类名+对象内存地址,就是你看到的异常显示内容。
解决方案
方案1:快速实现(适配现有代码逻辑)
直接在ProductModel类中重写toString()方法,返回你想要在列表项展示的文本即可,示例代码如下:
@Override public String toString() { // 可按你期望的格式拼接产品信息,比如下方的 产品名称+品牌 格式 return getProductName() + " " + getProductBrand(); }
该方案不需要修改你现有适配器的初始化逻辑,重写完方法后运行即可达到预期显示效果,原有点击事件取业务数据的逻辑完全不受影响,后续的编辑、删除操作都可以正常从allProductsFromType中取完整的ProductModel对象处理。
方案2:自定义适配器(后续要扩展列表项布局时推荐)
如果之后你需要给列表项增加更多控件(比如删除按钮、商品缩略图等),可以自定义ArrayAdapter,实现步骤如下:
- 新建列表项布局
item_product.xml,示例内容:
<!-- 可根据需求扩展更多控件 --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tv_product_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:textSize="16sp"/>
- 编写自定义适配器代码:
public class ProductAdapter extends ArrayAdapter<ProductModel> { public ProductAdapter(Context context, List<ProductModel> productList) { super(context, 0, productList); } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_product, parent, false); } ProductModel product = getItem(position); TextView tvInfo = convertView.findViewById(R.id.tv_product_info); // 按需求设置显示内容 tvInfo.setText(product.getProductName() + " " + product.getProductBrand()); return convertView; } }
- 替换原有适配器初始化代码即可:
// 把原来的ArrayAdapter初始化替换为下面的代码 ProductAdapter productArrayAdapter = new ProductAdapter(View_Products.this, allProductsFromType); lv_products_added.setAdapter(productArrayAdapter);
内容的提问来源于stack exchange,提问作者HoneybunHero
相关产品推荐
相关产品推荐

