Right now, I have a listview that is being populated with data from an existing database. It is only being populated with text but I want it to also display images. In the database, I stored the image path in the table for the corresponding image of each entry. The images are in the drawable. I'm not sure how to edit it so it also displays the images.
现在,我有一个列表视图,其中填充了现有数据库中的数据。它只是填充文本,但我希望它也显示图像。在数据库中,我将图像路径存储在表中,以存储每个条目的相应图像。图像在drawable中。我不知道如何编辑它所以它也显示图像。
I did this imageview.setImageResource(getDrawable(rootView.getContext(),imagePath));
to set the image in a different activity so I figured it would be similar but I'm not sure.
我做了这个imageview.setImageResource(getDrawable(rootView.getContext(),imagePath));将图像设置为不同的活动,所以我认为它会相似,但我不确定。
private void displayListView() {
final Cursor cursor = dbHelper.fetchAllRecipes();
// The desired columns to be bound
String[] columns = new String[]{
//DBHandler.COLUMN_CODE,
DBHandler.COLUMN_NAME,
DBHandler.COLUMN_TYPE,
DBHandler.COLUMN_INGRED,
DBHandler.COLUMN_SPECIAL
};
// the XML defined views which the data will be bound to
int[] to = new int[]{
//R.id.code,
R.id.name,
R.id.type,
R.id.ingredient,
R.id.special
};
// create the adapter using the cursor pointing to the desired data
//as well as the layout information
dataAdapter = new SimpleCursorAdapter(
this, R.layout.recipeinfo,
cursor,
columns,
to,
0);
final ListView listView = (ListView) findViewById(R.id.listView1);
// Assign adapter to ListView
listView.setAdapter(dataAdapter);
}
public static int getDrawable(Context context, String name)
{
Assert.assertNotNull(context);
Assert.assertNotNull(name);
return context.getResources().getIdentifier(name,
"drawable", context.getPackageName());
}
recipeinfo.xml (format for each element in the listview)
recipeinfo.xml(listview中每个元素的格式)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dip"
android:id="@+id/recipe_layout">
<GridLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:id="@+id/image"
android:layout_column="0"
android:layout_row="0"
android:layout_rowSpan="4"
android:adjustViewBounds="true"
android:baselineAlignBottom="false"
android:cropToPadding="false"
android:nestedScrollingEnabled="false"
android:layout_marginRight="15dp"/>
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_column="1"
android:layout_row="0"
android:textColor="@android:color/black"/>
<TextView
android:id="@+id/type"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_column="1"
android:layout_row="1"/>
<TextView
android:id="@+id/ingredient"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_column="1"
android:layout_row="2"/>
<TextView
android:id="@+id/special"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_column="1"
android:layout_row="3"/>
</GridLayout>
1 个解决方案
#1
0
I figured it out. I just made a custom adapter like greenapps suggested.
我想到了。我刚刚制作了一个类似greenapps的自定义适配器。
public class CustomCursorAdapter extends CursorAdapter {
public CustomCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}
// The newView method is used to inflate a new view and return it,
// you don't bind any data to the view at this point.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.recipeinfo, parent, false);
}
// The bindView method is used to bind all data to a given view
// such as setting the text on a TextView.
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
ImageView image = (ImageView)view.findViewById(R.id.image);
TextView name = (TextView) view.findViewById(R.id.name);
TextView type = (TextView) view.findViewById(R.id.type);
TextView ingredient = (TextView) view.findViewById(R.id.ingredient);
TextView special = (TextView) view.findViewById(R.id.special);
// Extract properties from cursor
String imagePath = cursor.getString(cursor.getColumnIndexOrThrow("imgpath"));
String recipeName = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String recipeType = cursor.getString(cursor.getColumnIndexOrThrow("type"));
String recipeMainIngredient = cursor.getString(cursor.getColumnIndexOrThrow("ingred"));
String recipeSpecial = cursor.getString(cursor.getColumnIndexOrThrow("special"));
// Populate fields with extracted properties
image.setImageResource(getDrawable(view.getContext(), imagePath));
name.setText(recipeName);
type.setText(recipeType);
ingredient.setText(recipeMainIngredient);
special.setText(recipeSpecial);
}
}
#1
0
I figured it out. I just made a custom adapter like greenapps suggested.
我想到了。我刚刚制作了一个类似greenapps的自定义适配器。
public class CustomCursorAdapter extends CursorAdapter {
public CustomCursorAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}
// The newView method is used to inflate a new view and return it,
// you don't bind any data to the view at this point.
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.recipeinfo, parent, false);
}
// The bindView method is used to bind all data to a given view
// such as setting the text on a TextView.
@Override
public void bindView(View view, Context context, Cursor cursor) {
// Find fields to populate in inflated template
ImageView image = (ImageView)view.findViewById(R.id.image);
TextView name = (TextView) view.findViewById(R.id.name);
TextView type = (TextView) view.findViewById(R.id.type);
TextView ingredient = (TextView) view.findViewById(R.id.ingredient);
TextView special = (TextView) view.findViewById(R.id.special);
// Extract properties from cursor
String imagePath = cursor.getString(cursor.getColumnIndexOrThrow("imgpath"));
String recipeName = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String recipeType = cursor.getString(cursor.getColumnIndexOrThrow("type"));
String recipeMainIngredient = cursor.getString(cursor.getColumnIndexOrThrow("ingred"));
String recipeSpecial = cursor.getString(cursor.getColumnIndexOrThrow("special"));
// Populate fields with extracted properties
image.setImageResource(getDrawable(view.getContext(), imagePath));
name.setText(recipeName);
type.setText(recipeType);
ingredient.setText(recipeMainIngredient);
special.setText(recipeSpecial);
}
}