Как загрузить изображения из Drawable в SimpleCursorAdapter

Я создаю представление списка с помощью Simple Cursor Adapter в этом адаптере. Теперь я получаю имена своих столбцов Sqlite. Я хочу добавить изображения в тот же адаптер из Drawable Folder. Как мы можем это сделать?

Вот мой код:

    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);

person vasanth    schedule 31.10.2015    source источник
comment
ваша проблема решена или еще нет   -  person Antwan    schedule 31.10.2015
comment
Я создаю объект для хранения изображений из Drwable int[] imageResource = {R.drawable.juice, R.drawable.medicinebowl, R.drawable.kam}; и прикрепляю его к своему адаптеру, например String[] from = new String[]{dbHelper.TITLE, String.valueOf(imageResource)}; @Tony.   -  person vasanth    schedule 31.10.2015
comment
вам нужен массив для идентификаторов объектов   -  person Antwan    schedule 31.10.2015
comment
можешь подробно объяснить, пожалуйста, @Tony   -  person vasanth    schedule 31.10.2015
comment
я отредактировал свой ответ   -  person Antwan    schedule 31.10.2015
comment
@vasanth вам нужно связать свое представление, пожалуйста, посмотрите мой ответ   -  person Arsal Imam    schedule 31.10.2015
comment
TYPE_ONE к чему это относится?? @АрсалИмам   -  person vasanth    schedule 31.10.2015
comment
Это в основном цель вашего изображения   -  person Arsal Imam    schedule 31.10.2015


Ответы (3)


Для этого вам понадобится собственный макет, а также переопределение метода setViewBinder. Ниже приведен пример, который может помочь вам понять,

ВашКласс.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;
        }
    });

список.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>
person Arsal Imam    schedule 31.10.2015
comment
В приведенном выше коде imgs является целочисленной переменной массива для идентификаторов вашего изображения...! Удачи - person Arsal Imam; 31.10.2015
comment
TYPE_ONE к чему это относится?? @Арсал Имам - person vasanth; 31.10.2015
comment
Поле типа, если у вас есть несколько изображений, может быть установлено в строке представления списка. - person Antwan; 31.10.2015
comment
Как использовать регистр строк Зависит от моего названия @ArsalImam - person vasanth; 31.10.2015

Я думаю, вы можете использовать этот метод

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

и передайте это вашему конструктору SimpleCursorAdapter.

person Nabeel K    schedule 31.10.2015
comment
SimpleCursorAdapter не содержит самого ImageView...! - person Arsal Imam; 31.10.2015
comment
Тогда зачем вам нужны чертежи внутри адаптера? - person Nabeel K; 31.10.2015
comment
Я создаю объект для хранения изображений из Drwable int[] imageResource = {R.drawable.juice, R.drawable.medicinebowl, R.drawable.kam}; и прикрепляю его к своему адаптеру, например String[] from = new String[]{dbHelper.TITLE, String.valueOf(imageResource)};@beardedbeast. - person vasanth; 31.10.2015

Вы можете просто сделать это, добавив эту строку

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 должен содержать идентификаторы объекта, которому вы хотите присвоить данные

и это для изображений

    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;
   }
});

настройка ресурса изображения должна зависеть от типа вашей строки

person Antwan    schedule 31.10.2015
comment
как подключить в адаптере? можно поподробнее пожалуйста? @Тони - person vasanth; 31.10.2015
comment
вы можете использовать это, и, честно говоря, @Arsal сначала упомянул об этом - person Antwan; 31.10.2015
comment
((ImageView) view).setImageDrawable(imageresource);?? @Тони - person vasanth; 31.10.2015
comment
setImageDrawable (android.graphics.drawable.Drawable) в ImageView не может быть применен к (int []), это то, что он показывает, когда я пытаюсь применить((ImageView)view).setImageDrawable(imageresource); @Tony - person vasanth; 31.10.2015
comment
проверьте мой обновленный ответ, вместо этого используйте ресурс изображения - person Antwan; 31.10.2015
comment
Проверьте мой обновленный код @Tony - person vasanth; 31.10.2015
comment
используйте setImageResource вместо setImageDrawable @vasanth - person Antwan; 31.10.2015
comment
SetImageResource (int) в ImageView не может быть применен к (int []) @Tony - person vasanth; 31.10.2015
comment
потому что вы не можете установить массив изображений, попробуйте одно изображение, подобное этому R.drawable.juice - person Antwan; 31.10.2015
comment
` int [] imageResource = {R.drawable.juice}; adapter.setViewBinder (новый SimpleCursorAdapter.ViewBinder () { public boolean setViewValue (представление, курсор курсора, int columnIndex) { if (view.getId () == R. id.circle) { //... // ((ImageView) view).setImageResource(imageResource); ((ImageView)view).setImageResource(imageResource); return true; //true, потому что данные были привязаны к представлению } return false; } });` Все та же проблема @Tony - person vasanth; 31.10.2015
comment
вам нужно сделать дополнительное условие для типа строки, чтобы установить соответствующий идентификатор изображения, вы не можете установить весь массив одного типа, я просто приведу пример того, как вы можете этого добиться - person Antwan; 31.10.2015
comment
((ImageView)view).setImageResource(imageResource[R.drawable.juice]) когда я попробовал это, мое приложение вышло из строя, и в нем говорится, что столбец '[I@41cbb158' не существует @Tony - person vasanth; 31.10.2015
comment
я не могу найти обновленный ответ - person vasanth; 31.10.2015
comment
Мне нужно знать, от какого столбца в вашей базе данных вы зависите, чтобы установить соответствующий рисунок? - person Antwan; 31.10.2015
comment
В моей пользовательской активности я создал Simple Textview и ImageView, и я извлекаю базу данных и отображаю ее в этом текстовом представлении. - person vasanth; 31.10.2015
comment
здесь, чтобы помочь, я могу взять фрагмент из @arsal, и если это поможет, вы должны отдать ему должное. - person Antwan; 31.10.2015
comment
Я хочу установить изображение столбца заголовка из моей базы данных @Tony - person vasanth; 31.10.2015
comment
так что ваш случай переключения будет, например, в заголовке - person Antwan; 31.10.2015
comment
если заголовок оранжевый, вы можете установить R.drwable.orange в качестве ресурса изображения - person Antwan; 31.10.2015
comment
` switch (view.getId()) { case R.id.image: int imageType = cursor.getInt(columnIndex); интервал изображенияToBeShown=0; switch (imageType) { case ??: imageToBeShown=imgs[0]; перерыв;` - person vasanth; 31.10.2015
comment
в приведенном выше коде, на чем я могу настаивать?? @Тони - person vasanth; 31.10.2015
comment
Значение из соответствующего столбца в вашей базе данных - person Antwan; 31.10.2015
comment
Использование курсора = dbHelper.gettitles(sqLiteDatabase); я получаю названия из своей базы данных, так что я хочу использовать в случае Switch @Tony - person vasanth; 31.10.2015