如何将Drawable中的图片加载到SimpleCursorAdapter中

3

我使用Simple Cursor Adapter创建了一个列表视图,在该适配器中,我获取了Sqlite列名,现在我想从Drawable文件夹中添加图像到同一个适配器中。如何做到这一点?请提供您的建议和想法,谢谢。

这是我的代码:

    protected void onCreate(Bundle savedInstanceState) {
           final int[] imageResource =new int[] {R.drawable.juice, R.drawable.medicinebowl, R.drawable.kam};
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listView= (ListView) findViewById(R.id.listView);
     dbHelper = new SqlLiteDbHelper(this);
            try {
                dbHelper.openDataBase();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            sqLiteDatabase = dbHelper.getReadableDatabase();
            cursor = dbHelper.gettitles(sqLiteDatabase);
            String[] from = new String[]{dbHelper.TITLE, String.valueOf(circle)};
    int[] to = new int[]{R.id.title,R.id.circle};
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.title_row, cursor, from, to);
            adapter.notifyDataSetChanged();

            listView.setAdapter(adapter);

你的问题解决了吗?还没有? - Antwan
我创建了一个对象来保存Drwable int[] imageResource = {R.drawable.juice, R.drawable.medicinebowl, R.drawable.kam};中的图像,并将其附加到我的适配器中,如String[] from = new String[]{dbHelper.TITLE, String.valueOf(imageResource)}; @Tony - vasanth
你需要一个对象 ID 的数组。 - Antwan
能否请Tony详细解释一下? - vasanth
@vasanth 你需要绑定你的视图,请查看我的答案。 - Arsal Imam
显示剩余3条评论
3个回答

0
你可以通过添加这行代码来简单地完成这个任务。
your_imageview.setImageResource(R.drawable.drwable_image);

如果您还没有创建扩展SimpleCursorAdapter的自定义适配器,您可以这样做。
  String[] columns = new String[] { People.NAME, People.NUMBER };
int[] to = new int[] { R.id.name_entry, R.id.number_entry };

SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.list_example_entry, cursor, columns, to);

列数组应包含日期,to 数组应包含您想要分配数据的对象的 ID。

对于图像也是如此。

    listAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder(){

   public boolean setViewValue(View view, Cursor cursor, int columnIndex){
       if(view.getId() == R.id.your_image_view_id){
          int imageType = cursor.getInt(columnIndex);
            int imageToBeShown=0;
            switch (imageType) {
            case TYPE_ONE:
                imageToBeShown=imgs[0];
                break;
            case TYPE_TWO:
                imageToBeShown=imgs[1];
                break;
            case TYPE_THREE:
                imageToBeShown=imgs[2];
                break;
            case TYPE_FOUR:
                imageToBeShown=imgs[3];
                break;
            case TYPE_FIVE:
                imageToBeShown=imgs[4];
                break;
            case TYPE_SIX:
                imageToBeShown=imgs[5];
                break;
            }
            ((ImageView)view).setImageResource(imageToBeShown);

           return true; //true because the data was bound to the view
       }
       return false;
   }
});

设置图像资源应该根据您的行类型而定


你可以使用这个,说实话@Arsal最先提到了这个。 - Antwan
((ImageView)view).setImageDrawable(imageresource);?? @Tony - vasanth
我找不到更新的答案。 - vasanth
在我的自定义活动中,我创建了一个简单的文本视图和图像视图,并且我从数据库中获取数据并在该文本视图中显示。 - vasanth
如果标题是橙色,您可以将R.drawable.orange设置为图像资源。 - Antwan
显示剩余19条评论

0

为此,您需要自己的自定义布局,并覆盖setViewBinder方法。以下是一个示例,可以帮助您理解:

YourClass.java

// The desired columns to be bound
    String[] columns = new String[] { DBHelper.KEY_IMAGE_TYPE, DBHelper.KEY_HOUSE,
            DBHelper.KEY_PRICE };

    // the XML defined views which the data will be bound to
    int[] to = new int[] {  
            R.id.icon,
            R.id.bowler_txt};

    SimpleCursorAdapter dataAdapter = new SimpleCursorAdapter(this,
            R.layout.listrow, cursor, columns, to, 0);
    dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor,
                int columnIndex) {
            switch (view.getId()) {
            case R.id.image:
                int imageType = cursor.getInt(columnIndex);
                int imageToBeShown=0;
                switch (imageType) {
                case TYPE_ONE:
                    imageToBeShown=imgs[0];
                    break;
                case TYPE_TWO:
                    imageToBeShown=imgs[1];
                    break;
                case TYPE_THREE:
                    imageToBeShown=imgs[2];
                    break;
                case TYPE_FOUR:
                    imageToBeShown=imgs[3];
                    break;
                case TYPE_FIVE:
                    imageToBeShown=imgs[4];
                    break;
                case TYPE_SIX:
                    imageToBeShown=imgs[5];
                    break;
                }
                ((ImageView)view).setImageResource(imageToBeShown);
                return true;
            }
            return false;
        }
    });

listrow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<TextView
    android:id="@+id/bowler_txt"
    android:paddingLeft="25dp"
    android:textSize="30dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Bowler"
    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

在上面的代码中,imgs 是整数数组变量,用于存储您图像可绘制的 ID...祝你好运! - Arsal Imam
TYPE_ONE 是什么意思?@Arsal Imam - vasanth
如果您有多个图像,则可以在列表视图行中设置类型字段。 - Antwan
如何根据我的标题使用行案例 @ArsalImam - vasanth

0

我认为你可以使用这种方法

int[] imageResource = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3};

并将其传递给您的SimpleCursorAdapter构造函数。


SimpleCursorAdapter本身不包含ImageView...! - Arsal Imam
那么为什么你需要在适配器中使用可绘制对象? - Nabeel K
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - vasanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接