如何根据sqlite数据库中的名称从drawable中获取图像,然后在列表视图中显示

Posted

技术标签:

【中文标题】如何根据sqlite数据库中的名称从drawable中获取图像,然后在列表视图中显示【英文标题】:how to get image from drawable according to their names in the sqlite database and then display it in list view 【发布时间】:2014-06-13 15:07:36 【问题描述】:

我正在创建一个使用 sqlite 和可绘制图像的 android 应用程序。

我需要的是根据 sqlite 数据库中的名称显示可绘制文件夹中存在的图像,但系统显示错误:

方法 getResources() 未为 CustomAdapterMatchSchedule 类型定义

这是我的代码:

row_list_match_schedule.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textGroup"
        android:layout_
        android:layout_
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Group"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/txtDate"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="Date"
        android:textAppearance="?android:attr/textAppearanceSmall" />



    <TextView
        android:id="@+id/textName1"
        android:layout_
        android:layout_
        android:layout_alignBottom="@+id/imageView1"
        android:layout_alignParentLeft="true"
        android:text="name1" />

    <TextView
        android:id="@+id/textName2"
        android:layout_
        android:layout_
        android:layout_alignBottom="@+id/imageView2"
        android:layout_alignParentRight="true"
        android:text="Name2" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_
        android:layout_
        android:layout_below="@+id/textLocation"
        android:layout_toRightOf="@+id/textName1"
        android:adjustViewBounds="true"
        android:maxHeight="40dp"
        android:maxWidth="40dp"
        android:scaleType="fitCenter"
        android:src="@drawable/algeria_flag" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_
        android:layout_
        android:layout_alignTop="@+id/imageView1"
        android:layout_toLeftOf="@+id/textName2"
        android:adjustViewBounds="true"
        android:maxHeight="40dp"
        android:maxWidth="40dp"
        android:scaleType="fitCenter"
        android:src="@drawable/algeria_flag" />

    <TextView
        android:id="@+id/textLocation"
        android:layout_
        android:layout_
        android:layout_below="@+id/textGroup"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="18dp"
        android:text="Location" />

</RelativeLayout>

CustomAdapterMatchSchedule.java

package com.devleb.expandablelistdemo3;

import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapterMatchSchedule extends BaseAdapter 
    ArrayList<ItemDetails> itemdetailsList;
    Context context;

    public CustomAdapterMatchSchedule(Context context, ArrayList<ItemDetails> list) 

            this.context = context;
            itemdetailsList = list;
        




    @Override
    public int getCount() 
        // TODO Auto-generated method stub
        return itemdetailsList.size();
    

    @Override
    public Object getItem(int position) 
        // TODO Auto-generated method stub
        return itemdetailsList.get(position);
    

    @Override
    public long getItemId(int position) 
        // TODO Auto-generated method stub
        return position;
    

    @Override
    public View getView(int position, View convertView, ViewGroup arg2) 
        // TODO Auto-generated method stub
        ItemDetails itemdetail = itemdetailsList.get(position);

        if (convertView == null) 
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.row_list_match_schedule, null);
        
      //Stad_name
        TextView txtStadName = (TextView)convertView.findViewById(R.id.textLocation);
        txtStadName.setText(itemdetail.getStad_name());
        //team1
        TextView txtTeam1 = (TextView)convertView.findViewById(R.id.textName1);
        txtTeam1.setText(itemdetail.getTeam1());
        //team2
        TextView txtTeam2 = (TextView)convertView.findViewById(R.id.textName2);
        txtTeam2.setText(itemdetail.getTeam2());

        //List of images  
        //****get the Image from drwable folder according to their names in the sqlite database******//
        //
       // ImageView imgflag1 = (ImageView)convertView.findViewById(R.id.imageView1);
       // imgflag1.

        int imageid = getResources().getIdentifier("com.devleb.expandablelistdemo3:drawable/brazil_flag", null, null);
        ImageView imagenow = (ImageView)convertView.findViewById(R.id.imageView1);
        imagenow.setImageResource(imageid);





        return null;
    


那么如何从这里继续,谁能帮助我???

【问题讨论】:

使用 context.getResources() 我希望它能工作 【参考方案1】:

getIdentifier 没问题,但你应该这样使用它:

 int imageid = getResources().getIdentifier("brazil_flag", "drawable", context.getPackageName());

第一个参数是你要查找的资源的名称,第二个参数是资源的类型,第三个是要查找的包。

【讨论】:

@blackbelt 我将您的建议与 Yogendra 的建议一起添加以使其发挥作用,但我现在还有其他问题可以帮助我吗? 当然。如果您通过链接发布了一个新问题,请发表评论。有时间我去看看 这是我的问题希望你能帮助我this is the link

以上是关于如何根据sqlite数据库中的名称从drawable中获取图像,然后在列表视图中显示的主要内容,如果未能解决你的问题,请参考以下文章

将drawable中的图像作为文件读取

ListView 未根据 sqlite 中的名称显示可绘制对象中的正确图像

如何根据日期列中的月份从 SQLite 中获取数据

如何从sqlite +phonegap中的表中获取第一列名称

Android 使用SQLite存储以及读取Drawable对象

如何使用 AsyncTask 将图像从 drawable 加载到 listView