gpt4 book ai didi

android - 来自 ListView/row 的 TextView 上的动态背景图像

转载 作者:行者123 更新时间:2023-11-30 04:13:19 24 4
gpt4 key购买 nike

我有一个 ListView,它有两个 TextViews。我正在尝试将背景图像动态设置为 TextViews 之一。根据每个项目/行的类别,我有大约 18 张不同的图像要显示。这些图像被命名为 "abc1""abc2" 等。这是我的自定义 CursorAdapter 的代码:

  private class MyListAdapter extends SimpleCursorAdapter {

public MyListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
super(context, layout , cursor, from, to);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

// Get the resource name and id
String resourceName = "R.drawable.abc" + cursor.getString(7);
int resid = context.getResources().getIdentifier(resourceName,"drawable",context.getPackageName());

// Create the idno textview with background image
TextView idno = (TextView) view.findViewById(R.id.idno);
idno.setText(cursor.getString(3));
idno.setBackgroundResource(resid);

// create the material textview
TextView materials = (TextView) view.findViewById(R.id.materials);
materials.setText(cursor.getString(1));
}
}

当我在调试中运行它时,resid 总是返回 0,表示找不到资源。 resourceName 看起来正确,id:"R.drawable.abc1"。我将图像文件导入到 res/drawable 文件夹中,它们列在 R.java 中。

这是解决此问题的正确方法还是有人有更好的解决方案?

最佳答案

您不要使用全名,例如 R.drawable.abc1 , 您仅使用 drawable 之后的名称.这是getIdentifier()的工作建立正确的String来自 name , typepackage .所以,使用 getIdentifier()应该是:

String resourceName = "abc" + cursor.getString(7);
int resid = context.getResources().getIdentifier(resourceName,"drawable",context.getPackageName());

此外,您应该看看另一种将图像设置为背景的方法,因为 getIdentifier()是一个执行起来慢得多的方法,它将在 bindView 中调用。当用户滚动 ListView 时可以多次调用的回调上下(有时用户可以非常快地执行此操作)。

编辑:

一种方法可以使用 getIdentifier更有效的方法是在自定义 CursorAdapter 中初始化 ID并存储在 HashMap<Integer, Integer> 中名称中出现的数字(abc 1、abc 2 等)与实际 ID 之间的映射:

private HashMap<Integer, Integer> setUpIdsMap() {
HashMap<Integer, Integer> mapIds = new HashMap<Integer, Integer>();
// I don't know if you also have abc0, if not use this and substract 1 from the cursor value you get
for (int i = 0; i < 18; i++) {
String resourceName = "abc" + 0;
int resid = context.getResources().getIdentifier(resourceName,"drawable",context.getPackageName());
mapIds.put(i, resid);
}

在适配器的构造函数中:

//...field in your adapter class
HashMap<Integer, Integer> ids = new HashMap<Integer, Integer>();

//in the constructor:
//...
ids = setUpIdsMap();
//...

然后在bindView方法使用返回的数组:

//...
// Create the idno textview with background image
TextView idno = (TextView) view.findViewById(R.id.idno);
idno.setText(cursor.getString(3));
idno.setBackgroundResource(ids.get(cursor.getString(7)));//depending if you have abc0 or not you may want to substract 1 from cursor.getString(7) to match the value from the setUpIdsMap method
//...

关于android - 来自 ListView/row 的 TextView 上的动态背景图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com