我想为列表中的前 3 个项目显示不同的图像
Posted
技术标签:
【中文标题】我想为列表中的前 3 个项目显示不同的图像【英文标题】:I'd like to display different image to the first 3 items in my list 【发布时间】:2015-12-19 08:58:48 【问题描述】:显示与LIstView
中的前三个项目不同的图像,从显示的图像到列表的其余部分。它不适用于我的适配器类,它只是将布局中的图像显示给所有项目
这是我的代码
public class MySimpleArrayAdapter extends ArrayAdapter
private final Context context;
private final String[] values;
// Constructor which is called when the custom adapter is created
public MySimpleArrayAdapter(Context context, String[] values)
// Select the layout for the cell
super(context, R.layout.list_layout, values);
this.context = context;
this.values = values;
@Override
public View getView(int position, View convertView, ViewGroup parent)
//inflate the xml file to a view object and must be used as shown below
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// create the row view
View rowView = inflater.inflate(R.layout.list_layout, parent, false);
// Link the widgets on the layout with the Java codes
TextView textView = (TextView) rowView.findViewById(R.id.label);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
// Set the content of the text based on the values string in the main activity
textView.setText(values[position]);
if ( position == 0 || position == 1 || position == 2)
imageView.setImageResource(R.drawable.logo);
else
imageView.setImageResource(R.drawable.second);
return rowView;
【问题讨论】:
您是从 Sqlite 的 api 获取图像吗?您可以通过动画显示三个或多个图像或使用 SQL 查询设置自定义布局以显示不同的图像 使用按 ASC(或 DSC)限制 3 排序 然后你会得到 3 个图像路径,然后将该图像路径更改为位图,最后将该位图设置为 ImageView :-) 你能检查一下你没有同名的图片吗? (检查所有可绘制文件夹) 你不能这样做。你需要有 ViewTypes。覆盖 getViewTypeCount 和 getViewType。如果您需要更多信息,请询问 【参考方案1】:我认为您应该使用BaseAdapter
而不是ArrayAdapter
。数组适配器主要用于将一个字段与一组值绑定。如果您的列表视图需要自定义,我建议您改用 BaseAdapter。
这是来自 android 文档:
由任意数组支持的具体 BaseAdapter 对象。默认情况下,此类期望提供的资源 id 引用单个 TextView。 如果你想使用更复杂的 布局,使用也接受字段 id 的构造函数。 该字段 id 应该在较大的布局资源中引用 TextView。
话虽如此,仍然可以使用ArrayAdapter
,您只需按照文档中的建议在ArrayAdapater
中使用另一个构造函数。因此,不要在构造函数中使用super(context, R.layout.list_layout, values);
,而是使用super(context, R.layout.list_layout, R.id.label, values);
。如果您希望您的 arrayadapter 使用图像,则需要在构造函数中传递 textview id。另外,我会将if ( position == 0 || position == 1 || position == 2)
更改为if ( position < 3)
,因为它看起来更干净:)
【讨论】:
更好的选择其实是 Recycler 及其适配器 确实如此。我不建议这样做,因为 Recyclerview 不使用相同类型的适配器,但它是提高性能和可定制性的最佳方式。 谢谢你,克里斯,我试过了,但也没用 出了什么问题?是否有任何构建输出或结果截图? 它只显示列表,所有项目都在 list_layout 中有图像以上是关于我想为列表中的前 3 个项目显示不同的图像的主要内容,如果未能解决你的问题,请参考以下文章