1

我有一個自定義ListView,其中RowItem包含TextViewImageView。 將動態添加RowItems如何添加取決於ListView中TextView文本的ImageView的

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

因此,如果在TextView代表「標題1」,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; 
     } 


    } 

我與Switch聲明試圖將其與position但只設置ImageViewRowItem是上的位置多數民衆贊成寫在case

回答

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遵守

1

什麼這樣的事情。

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()); 
} 
1

在這種情況下的解決辦法是添加方法用於獲取和設置各個字段爲您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; 
    } 
} 

一旦這些實現,你可以很容易地設置基於ImageViewTextView像這樣:

// 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 
+0

爲什麼要實現一個全新的對象?所有的數據已經在適配器中。 – Marcus 2015-01-26 22:04:38

相關問題