如何在android中为每个列表项放置不同的图像?

如何在android中为每个列表项放置不同的图像?,android,Android,在我的项目中,我需要创建Listview。我已经为textview和imageview创建了row.xml,以在listitems中显示。我在strings.xml文件中提到了这些列表项名称。但是我如何提到strings.xml文件中的图像。我如何做到这一点。 请帮助我解决这个问题。使用ResourceID获取一个图像数组,并在文本视图中插入值的位置设置imageview的背景。从ImageID数组获取图像。您不需要将图像或任何内容放入strings.xml。在适配器中,您可以显式地将图像设置为

在我的项目中,我需要创建Listview。我已经为textview和imageview创建了row.xml,以在listitems中显示。我在strings.xml文件中提到了这些列表项名称。但是我如何提到strings.xml文件中的图像。我如何做到这一点。
请帮助我解决这个问题。

使用ResourceID获取一个图像数组,并在文本视图中插入值的位置设置imageview的背景。从ImageID数组获取图像。您不需要将图像或任何内容放入strings.xml。在适配器中,您可以显式地将图像设置为每个项目的ImageView。如果每次显示的项目很少,您可以根据位置使用if-else if-else进行设置。或者您可以设置数组并相应地为大量项目设置图像。

只需使用以下代码即可

   Resources res = getResources();
   TypedArray icons = res.obtainTypedArray(R.array.icons);
   Drawable drawable = icons.getDrawable(0);//0 is index of your icons array

 <array name="icons">
        <item>@drawable/icon1</item>
        <item>@drawable/icon2</item>
        <item>@drawable/icon3</item>

    </array>
Resources res=getResources();
TypedArray图标=res.obtainTypedArray(R.array.icons);
Drawable Drawable=图标。getDrawable(0)//0是图标数组的索引
. 下面是类型化数组的示例

请确保图像的长度和字符串数组的长度应该相等,因为我没有把失败的条件

public class TestActivity extends Activity implements OnItemClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        ListView list=(ListView) findViewById(R.id.listView1);
        Resources res = getResources();
        TypedArray icons = res.obtainTypedArray(R.array.icons);


        String[] str=res.getStringArray(R.array.string_array);

        list.setAdapter(new Adapter(this,icons,str));

        list.setOnItemClickListener(this);

    }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) 
    {
        Toast.makeText(TestActivity.this,"You are clicked at:"+pos, Toast.LENGTH_SHORT).show();
    }
    class Adapter extends BaseAdapter
    {
        private Context context;
        private LayoutInflater inflater;
        TypedArray icons;
        String[] str;
        public Adapter(Context mContext, TypedArray icons,String[] str) 
        {
            this.context= mContext;
            this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            this.icons=icons;
            this.str=str;
        }

        @Override
        public int getCount() 
        {
            return icons.length();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }
        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }

        @Override
        public View getView(int pos, View convertView, ViewGroup arg2) {
            final MainListHolder mHolder;
            View v = convertView;
            if (convertView == null)
            {
                mHolder = new MainListHolder();
                v = inflater.inflate(R.layout.inflate_layout, null);
                mHolder.mTextview=(TextView) v.findViewById(R.id.textView1);
                mHolder.imageView=(ImageView) v.findViewById(R.id.imageView1);
                v.setTag(mHolder);
            } 
            else
            {
                mHolder = (MainListHolder) v.getTag();
            }

            mHolder.mTextview.setText(str[pos]);
            Drawable drawable = icons.getDrawable(pos);//0 is index of your icons array
            mHolder.imageView.setImageDrawable(drawable);//Your Drawables array
            return v;
        }
        class MainListHolder 
        {

            private ImageView imageView;
            private TextView mTextview;
        }
    }

}
公共类TestActivity扩展了活动实现的McClickListener{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView列表=(ListView)findViewById(R.id.listView1);
Resources res=getResources();
TypedArray图标=res.obtainTypedArray(R.array.icons);
String[]str=res.getStringArray(R.array.String\u数组);
setAdapter(新适配器(这个,图标,str));
list.setOnItemClickListener(此);
}
@凌驾
公共链接(AdapterView arg0、视图arg1、内部位置、长arg3)
{
Toast.makeText(TestActivity.this),点击时:“+pos,Toast.LENGTH\u SHORT.show();
}
类适配器扩展了BaseAdapter
{
私人语境;
私人充气机;
键入Darray图标;
字符串[]str;
公共适配器(上下文mContext、类型Darray图标、字符串[]str)
{
this.context=mContext;
this.inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE);
图标=图标;
str=str;
}
@凌驾
public int getCount()
{
返回icons.length();
}
@凌驾
公共对象getItem(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@凌驾
公共长getItemId(int arg0){
//TODO自动生成的方法存根
返回arg0;
}
@凌驾
公共视图getView(int pos、视图转换视图、视图组arg2){
最终主列表持有人;
视图v=转换视图;
if(convertView==null)
{
mHolder=新的MainListHolder();
v=充气机。充气(R布局。充气布局,空);
mHolder.mTextview=(TextView)v.findviewbyd(R.id.TextView 1);
mHolder.imageView=(imageView)v.findviewbyd(R.id.imageView 1);
v、 setTag(mHolder);
} 
其他的
{
mHolder=(MainListHolder)v.getTag();
}
mHolder.mTextview.setText(str[pos]);
Drawable Drawable=图标。getDrawable(pos);//0是图标数组的索引
mHolder.imageView.setImageDrawable(drawable);//您的Drawables数组
返回v;
}
类主列表持有者
{
私人影像视图;
私有文本视图mTextview;
}
}
}

添加带有图像资源ID的整数数组..请给出一个例子?Resources res=getResources();TypedArray图标=res.obtainTypedArray(R.array.app1);Drawable Drawable=图标。getDrawable(0);我在我的java文件中给出了这样的结果,但它没有检测到数组…Wat to do plz help meI已经这样检查了它…它通过设置简单的图像为我工作。。ImageView im=(ImageView)findViewById(R.id.imageView1);im.setImageDrawable(可绘制);您好,对不起,我在values文件夹中创建了images.xml,并在其中定义了数组。但是现在我在arrays.xml中定义了数组,它没有显示任何错误。您能告诉我如何保持这些img以列出项目吗?我使用了开关大小写,但它显示错误..公共视图getView(int位置,视图convertView,视图组父级){ImageView myImageView=new ImageView(null);开关(位置){case 0:myImageView.setImageResource(R.drawable.imageUSA标志);中断;案例1:myImageView.setImageResource(R.drawable.imageUK标志);中断;}返回myImageView;}