使用 Arraylist 将图标添加到 Listview
Posted
技术标签:
【中文标题】使用 Arraylist 将图标添加到 Listview【英文标题】:Add icons to Listview using Arraylist 【发布时间】:2020-05-16 18:12:39 【问题描述】:我已经成功创建了一个包含所有选项(文本)的列表视图。但是,我想在每个选项旁边添加独特的图标。我该如何使用我的删除代码来执行此操作?
这是我想要实现的目标:
这是我的代码: AccountSettingsActivity.java
//All Options in Account Settings
private void setupSettingsList()
ListView listView = findViewById(R.id.lvAccountSettings);
ArrayList<String> options = new ArrayList<>();
options.add(getString((R.string.editProfile)));
options.add(getString(R.string.notifications));
options.add(getString(R.string.privacy_settings));
options.add(getString(R.string.security));
options.add(getString(R.string.ads));
options.add(getString(R.string.help));
options.add(getString(R.string.about));
options.add(getString(R.string.logout));
ArrayAdapter adapter = new ArrayAdapter(mContext, R.layout.listview_row_adjustment, options);
listView.setAdapter((adapter));
listview_row_adjustmnet.xml(这只是改变列表视图中选项的文本颜色和大小)
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listViewAdjustment"
android:layout_
android:layout_
android:textSize="17sp"
android:gravity="fill"
android:textColor="@color/white"/>
【问题讨论】:
这是你需要的一个很好的例子journaldev.com/10416/… 您必须为此目的使用自定义适配器。您必须创建一个自定义适配器并将适配器设置为列表视图。 这能回答你的问题吗? Custom Adapter for List View 这能回答你的问题吗? A custom ListView with a custom adapter in Android Studio 【参考方案1】:在 /res 文件夹中创建数组:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="images">
<item>@drawable/img1</item>
<item>@drawable/img2</item>
<item>@drawable/img3</item>
</array>
</resources>
更新账户设置:
//All Options in Account Settings
private void setupSettingsList()
ListView listView = findViewById(R.id.lvAccountSettings);
TypedArray images = getResources().obtainTypedArray(R.array.images);
ArrayList<String> options = new ArrayList<>();
options.add(getString((R.string.editProfile)));
options.add(getString(R.string.notifications));
options.add(getString(R.string.privacy_settings));
options.add(getString(R.string.security));
options.add(getString(R.string.ads));
options.add(getString(R.string.help));
options.add(getString(R.string.about));
options.add(getString(R.string.logout));
// add images to adapter
ArrayAdapter adapter = new ArrayAdapter(mContext, R.layout.listview_row_adjustment, options, images);
listView.setAdapter((adapter));
在 listview_row_adjustmnet.xml 中添加图像视图
在Adapter中设置图片:
imageView.setImageResource(images.getResourceId(i, -1));
【讨论】:
感谢您的回复,能否请您详细说明“在适配器中设置图像”部分,我似乎无法理解您所指的内容。 嗨,您将为此制作一个自定义适配器 我对这个很陌生,你能告诉我怎么做吗? devglan.com/android/create-custom-adapter-in-list-view 查看此链接【参考方案2】:使用带有如下标题和图标的数据模型
class Data
public int imageId;
public String txt;
Data(Drawable imageId, String text)
this.imageId = imageId;
this.txt = text;
Data menuItemSearch = new Data(ContextCompat.getDrawable(this, R.drawable.ic_search_orange), resources.getString(R.string.title))
当在图像中设置可绘制时使用这个
yourImage.setImageDrawable(data.imageId)
【讨论】:
【参考方案3】:首先,您必须在您的 listview_row_adjustmnet.xml 中添加。
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_>
<ImageView
android:layout_
android:layout_
android:id="@+id/imageView"
android:layout_gravity="center_horizontal|top"/>
<TextView
android:id="@+id/listViewAdjustment"
android:layout_
android:layout_
android:textSize="17sp"
android:gravity="fill"
android:textColor="@color/white"/>
对于代码 AccountSettingActivity 类:
private void setupSettingsList()
ListView listView = findViewById(R.id.lvAccountSettings);
ArrayList<String> options = new ArrayList<>();
options.add(getString((R.string.editProfile)));
options.add(getString(R.string.notifications));
options.add(getString(R.string.privacy_settings));
options.add(getString(R.string.security));
options.add(getString(R.string.ads));
options.add(getString(R.string.help));
options.add(getString(R.string.about));
options.add(getString(R.string.logout));
ArrayList<ImageView> images = new ArrayList<>();
//Please add Customized addapter
对于定制适配器,您可以在此链接https://www.youtube.com/watch?v=_YF6ocdPaBg 中找到帮助。
在代码中设置 ImageView 请看这个答案Using variable to change image in Java。
【讨论】:
ArrayAdapter以上是关于使用 Arraylist 将图标添加到 Listview的主要内容,如果未能解决你的问题,请参考以下文章
使用 DefaultListModel 将项目从 ArrayList 添加到 JList