为每个人服务,
我正在使用SQLite和android。我试图将查询结果与存储在drawable文件夹中的图像进行匹配。我试图动态搜索,然后将其显示到客户列表视图(图像+文本)。我不知道如何做到这一点。我可以从数据库中检索一个简单的查询结果,并将值显示到列表视图中,但我不知道如何在列表视图中显示图像+文本。任何人都可以帮助我并指导我走正确的道路吗?
以下代码是我活动的一部分
List<YAODeckHieraticBlue> valuesMainimage = datasource2.SQLDeckHieraticBlueTABLESEARCHMAINDECKIMAGE();
List<YAODeckHieraticBlue> valuesMain = datasource2.SQLDeckHieraticBlueTABLESEARCHMAINDECK();
ImageView thumbnail;
thumbnail = (ImageView)findViewById(R.list.thumb);
TextView name;
name = (TextView)findViewById(R.list.text);
name.setText(valuesMain);
thumbnail.setBackgroundResource ( getResourceID ( valuesMainimage , "drawable", getApplicationContext() ) );
//if I just take out the previous section it only display Text but I am missing the Image part in the Listview
ArrayAdapter<YAODeckHieraticBlue> adapterMain = new ArrayAdapter<YAODeckHieraticBlue>(this,
android.R.layout.simple_list_item_1, valuesMain);
setListAdapter(adapterMain);
我使用以下代码来验证图像是否存在
protected final static int getResourceID
(final String resName, final String resType, final Context ctx)
{
final int ResourceID =
ctx.getResources().getIdentifier(resName, resType,
ctx.getApplicationInfo().packageName);
if (ResourceID == 0)
{
throw new IllegalArgumentException
(
"No resource string found with name " + resName
);
}
else
{
return ResourceID;
}
}
我在数据库中的表格如下所示:
Table Name: [Deck name Hieratic Blue]
column1:ID - Integer
column2 [Card Name] - Text
column3: Type - Text
column4: Deck_typeID - Integer
Column5: Images -Text
注意:image列只存储没有文件扩展名的图像文件名(.png)
答案 0 :(得分:1)
您正在使用默认的ArrayAdapter将数据放入ListView。您需要的是一个定制的SimpleCursorAdapter。 SimpleCursorAdapter用于从数据库中获取数据。通过扩展此类并覆盖其方法,您还可以将图片放入列表视图中!扩展SimpleCursorAdapter时覆盖newView()和bindView()。还要记住使用View Holder来获得更好的性能。
如果我说的话没有给你任何场景!别担心。使用此链接http://goo.gl/FWls0z
它解释了如何使用自定义适配器创建带有图像的listView。它不包括SimpleCursorAdapter,因为它不使用数据库。但如果你正确理解这个概念。您也可以轻松使用SimpleCursorAdapter。
我为您编写自定义适配器。我希望它有所帮助。
首先,您需要单个单行的布局
布局/ single_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip" >
<TextView
android:id="@+id/name_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="28dip" />
<ImageView
android:id="@+id/name_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
然后你需要定义一个自定义的SimplerCursorAdapter
public class CustomStudentAdapter extends SimpleCursorAdapter {
private int layout;
public CustomStudentAdapter(Context context, int layout, Cursor c){
super(context, layout, c, null, null, 1);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(layout,parent,false);
MyViewHolder holder = new MyViewHolder(v);
v.setTag(holder);
return v;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
int nameIndex = cursor.getColumnIndex(StudentTable.NAME);
int imageNameIndex = cursor.getColumnIndex(StudentTable.IMAGE_URL);
String name = cursor.getString(nameIndex);
String imageName = cursor.getString(imageNameIndex);
MyViewHolder holder = (MyViewHolder) view.getTag();
TextView nameInput = holder.name;
ImageView image = holder.image;
nameInput.setText(name);
int imageResource;
//colculate image resource based on iamgeName!
image.setImageResource(imageResource);
}
//View Holder is only a mechanism for performance increase. findViewById is a cup intensive task. View Holder
//just makes sure its not get called when there is no need for it!!
class MyViewHolder{
private TextView name;
private ImageView image;
public MyViewHolder(View v){
name = (TextView) v.findViewById(R.id.name);
image = (ImageView) v.findViewById(R.id.image);
}
}
}
最后在这样的活动中使用自定义适配器。
Cursor cursor = helper.getAllStudents();
CustomStudentAdapter studentAdapter = new CustomStudentAdapter(this,R.layout.single_row,cursor);
this.setListAdapter(studentAdapter);
那就是它。我没有测试过这段代码,代码有可能不起作用!在这种情况下,您需要扩展CursorAdapter,因为它是SimpleCursorAdapter的父级,它为您提供了更大的灵活性!