我想为列表中的前 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 个项目显示不同的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何显示在 Asp.net MVC 中找不到的图像

在没有文件路径的 Access 中组合框更改时显示不同的图像

为 QListWidget 中的特定项目设置不同的颜色

在回收站视图中显示不同大小的多个图像

添加以不同标签显示的列表框项目和值(在不同表单之间)

相同的片段与不同选项卡上的列表视图