【问题标题】:How to add ImageView's that are depending on the text of the TextView in a ListView如何在 ListView 中添加取决于 TextView 文本的 ImageView
【发布时间】:2015-01-26 21:44:17
【问题描述】:

我有一个自定义 ListView ,其中 RowItem 包含 TextViewImageViewRowItems 将被动态添加。

我只是想知道如何将ImageView 添加到TextView 中的特定文本中。

因此,如果在TextView 中代表“Title1”,则应将ImageView“R.drawable.ic_title1”添加到RowItem


这是我的代码

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(position){

                case 1 : image.setImageResource(R.drawable.ic_title1);
                    break;

                case 2 : image.setImageResource(R.drawable.ic_title2);
                    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;
        }


    }

我用positionSwitch 语句尝试了它,但这只将ImageView 设置为RowItem,即在case 中写入的位置。

【问题讨论】:

    标签: android listview android-listview imageview switch-statement


    【解决方案1】:

    您可以根据TextView 的文本创建switch-case 声明,如下所示

    switch(tv.getText().toString()){
    
                    case "Title1" : image.setImageResource(R.drawable.ic_title1);
                        break;
    
                    case "Title2" : image.setImageResource(R.drawable.ic_title2);
                        break;
    
                    default:
                        //Default image here, if no case found
                    break;
    }
    

    注意:以上答案需要 JRE 1.7 合规性

    【讨论】:

      【解决方案2】:

      在这种情况下,解决方案是为您的ListView 对象添加获取和设置各个字段的方法。例如,由于您的行项目中有一个TextView 和一个ImageView,让我们假设您的行对象如下所示:

      public class ListObject
      {
      
          public ListObject (String textView, String imageView)
          {
              super();
              this.textView                      = textView;
              this.imageView                     = imageView;
          }
      
          private String     textView;
          private String     imageView;
      
          public String getTextView ()
          {
              return textView;
          }
      
          public void setTextView (String pTextView)
          {
              this.textView = pTextView;
          }
      
          public String getImageView ()
          {
              return imageView;
          }
      
          public void setImageView (String pImageView)
          {
              this.imageView = pImageView;
          }
      }
      

      一旦实现了这些,您就可以根据您的TextView 轻松设置您的ImageView,如下所示:

      // As an example, let us use the first list item
      ListObject listObject = (ListObject) parent.getItemAtPosition(0);
      
      if (listObject.getTextView == "Title1")
      {
          listObject.setImageView("NameOfResource");
      }
      // so on and so forth
      

      【讨论】:

      • 为什么要实现一个全新的对象?所有数据都已经在适配器中了。
      【解决方案3】:

      这样的事情怎么样。

      image.setImageResource(getImageId(this, "ic_" + tv.getText().toString().toLowerCase());
      

      所以基本上你是从文本视图中获取标题,将其操作为你存储图像的格式,并调用下面的帮助程序来获取正确的图像 ID。

      public static int getImageId(Context context, String imageName) {
          return context.getResources().getIdentifier("drawable/" + imageName, null, context.getPackageName());
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        相关资源
        最近更新 更多