Android 如何在依赖于TextView文本的自定义ListView中设置ImageView?

Android 如何在依赖于TextView文本的自定义ListView中设置ImageView?,android,listview,textview,imageview,Android,Listview,Textview,Imageview,我有一个自定义ListView,其中包含一个包含TextView和ImageView的rowItem。可以从用户动态添加行项目 那么,如何将特定的ImageView设置为特定的TextView呢。例如,文本bird获取名为bird的ImageView,等等 我用开关柜试过,但没用 我的ListView适配器: class SessionItemAdapter extends ArrayAdapter<Map> { final ArrayList<Map> valu

我有一个自定义ListView,其中包含一个包含TextView和ImageView的rowItem。可以从用户动态添加行项目

那么,如何将特定的ImageView设置为特定的TextView呢。例如,文本bird获取名为bird的ImageView,等等

我用开关柜试过,但没用

我的ListView适配器:

class SessionItemAdapter extends ArrayAdapter<Map> {
    final ArrayList<Map> values;
    Context context;

    SessionItemAdapter(Context context, ArrayList<Map> values) {
        super(context, R.layout.session_list_layout_row, values);
        this.values = values;
        this.context = context;
    }

    @Override
    public View getView(final int position, View view, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.session_list_layout_row, parent, false);

        TextView tv = (TextView) rowView.findViewById(R.id.stepTime);
        final int rowId = (Integer) values.get(position).get("id");
        int beepStringId = getResources().getIdentifier("exercise_typ_" + values.get(position).get("type"), "string", getPackageName());

        rowView.setTag(rowId);

        tv.setText(getResources().getString(beepStringId));
        ImageView image =(ImageView) rowView.findViewById(R.id.imageView2);

        switch (rowId) {
            case 1 : image.setImageResource(R.drawable.ic_launcher);
                break;

            case 2 : image.setImageResource(R.drawable.ic_down);
                break;
        }

        ImageButton deleteSession = (ImageButton) rowView.findViewById(R.id.session_item_del);
        deleteSession.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*if (!startStopToggle.isChecked()) {*/
                sessionAdapter.remove(values.get(position));
                sessionAdapter.notifyDataSetChanged();
            }
        });

        return rowView;
    }

    //in your adapter getAllPlayers() would be something like this
    public List<String> getAllPlayers() {
        List<String> list = new ArrayList<String>();
        for (Map item : values) {
            int beepStringId = context.getResources().getIdentifier("exercise_typ_"
                + item.get("type"), "string", context.getPackageName());
            String str = context.getResources().getString(beepStringId);
            list.add(str);
        }
        return list;
    }
}

当文本视图中填充单词bird时,您可以使用它在ImageView中填充正确的图像

txtView.setText(textVar);

if (txtView.getText().equals("bird")) {
    imageView.setImageResource(R.drawable.bird_drawable);
}

一种方法是,如果您可以控制命名可绘制名称,则可以将可绘制资源命名为与要匹配的文本/标题相同的名称。因此,您可以使用birds.png、anies.png等可绘制名称,然后可以使用动态获取可绘制名称并附加到图像视图。 所以你的代码应该是这样的

int drawableResourceId = context.getResources().getIdentifier(getResources().getString(beepStringId), "drawable", context.getPackageName());
imageView.setImageResource(drawableResourceId);
这种方法的缺点是,如果标题中有空格或特殊字符,则必须单独处理。但对于一组相当简单的标题来说,这已经足够了


或者,您可以根据需要使用开关大小写。

textVar应该是什么意思?只是一些用于填充textView文本的字符串变量。使用它而不是硬编码bird,因为它感觉更适合您的情况,它将betv.setTextgetResources.getStringbeepStringId;对不起,它坏了。我有很多头衔,所以可以用开关盒吗?