簡體   English   中英

如何在依賴於TextView文本的自定義ListView中設置ImageView?

[英]How can I set a ImageView in a custom ListView that depends on the text of the TextView?

我有一個自定義ListView ,其中rowItem包含TextViewImageView 可以從用戶動態添加rowItems

那么如何將特定的ImageView設置為特定的TextView 例如,文本“ bird”獲得名為Bird的ImageView ,依此類推。

我用SwitchCase嘗試過,但是沒有用。

我的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;
    }
}

當TextView充滿“ bird”一詞時,您可以使用它用適當的圖像填充ImageView。

txtView.setText(textVar);

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

一種實現方法是,如果您可以控制可繪制名稱的命名,則可以將可繪制資源命名為與要匹配的文本/標題相同的名稱。 因此,您將擁有可繪制的名稱,例如birds.png,animals.png等。然后,您可以使用此答案來動態獲取可繪制的圖像並附加到圖像視圖。 所以你的代碼應該看起來像這樣

int drawableResourceId = context.getResources().getIdentifier(getResources().getString(beepStringId), "drawable", context.getPackageName());
imageView.setImageResource(drawableResourceId);

這種方法的缺點是,如果標題中有空格或特殊字符,則必須分別處理。 但是對於足夠簡單的標題集就足夠了。

另外,您也可以從API 19開始使用切換用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM