2012-11-08 2 views
0

목록의 각 항목이 TextView 및 하나 이상 (ImageView)으로 구성되도록 listView을 만들려고합니다.구성된 요소가있는 listView 사용

지금까지 listView은 인 항목으로 작동하려면 ArrayList<String>ArrayAdapter<String> 어댑터를 사용해야합니다.

내가 원하는 것을 얻을 수있는 방법이 있습니까? 다른 방법이 더 쉬울까요? (TableRows를 사용하는 것과 비슷하지만 onClickListener를 갖도록 구성 할 수 있는지 확신 할 수 없음)

답변

1

이 같은 레이아웃으로`list_items.xml` 만들기 각 행에 대해 HashMap을 포함하는 ArrayList에 데이터를 전달한다고 가정합니다.

#ListItem1 = data(0) - data.get(0).get("title"), data.get(0).get("image") 
    #ListItem2 = data(1) - data.get(1).get("title"), data.get(1).get("image") 
2

사용자 지정 목록보기를 사용해야합니다. http://www.androidpeople.com/android-custom-listview-tutorial-part-1. 링크를보십시오.

@Override 
    public int getItemViewType(int position) 
    { 
    int type; 
    if (ID.get(position)== 0){ 
    type = TYPE_ITEM1; //type 0 for image 
    } 
    else if (ID.get(position) == 1){ 
    type = TYPE_ITEM2; //type 1 for text 
    }else { 
    type = TYPE_ITEM3; //type 2 for videos 
} 
return type; 
} 
@Override 
    public int getViewTypeCount() { 
return 3; //three different layouts to be inflated 
} 
1

당신은 당신의 ListView의 Arraydapter를 통해 사용자 정의보기를 제공 할 수있다 (당신은 당신의 자신을 만들 수있는 ArrayAdapter와를 확장 할 수 있습니다). 다른 질문에 네, TableRows를 클릭 할 수있게 할 수 있습니다 (예 : XML 레이아웃 파일에서이 작업을 수행 할 수 있음).

MyAdapter myAdapter = new MyAdapter(this, data); 
myListView.setAdapter(myAdapter); 

I :

class MyAdapter extends BaseAdapter { 

    private Context context; 
    private LayoutInflater inflater; 
    private ViewHolder holder; 
    private ArrayList<HashMap<String, String>> data; 

    public MyAdapter(Context context, ArrayList<HashMap<String, String>> data) { 
     this.context = context; 
     this.data = data; 
     inflater = LayoutInflater.from(context); 
    } 

    // Below the Magic 
    public View getView(int position, View convertView, ViewGroup parent) { 
     inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

      if(convertView == null || convertView.getTag() == null) { 
       // Here you load the list_items.xml an inflate your Layout with it 
       convertView = inflater.inflate(R.layout.list_items, null); 

       holder = new ViewHolder(); 
       holder.text = (TextView) convertView.findViewById(R.id.mytext); 
       holder.image = (ImageView) convertView.findViewById(R.id.myimage); 

       convertView.setTag(holder); 

      } else {    
       holder = (ViewHolder) convertView.getTag(); 
      } 

      // We get the HashMap for our current Position in the ListView 
      row = data.get(position); 

      if(row != null) { 
       holder.text.setText(row.get("test")); 
       // Below could be setImageBitmap, setImageResource,... 
       // depends on how you get your image 
       holder.image.setImageBitmap(getImage(row.get("image")); 
      } 

      return convertView; 
     } 

     class ViewHolder { 
      TextView text; 
      ImageView image; 
     } 

} 

public getImage(String image) { 
     // Get your image from where you want it SD, drawable, internet) 
} 

이 같이 호출 :

<LinearLayout 
    android:orientation="horizontal" 
    [...] 
    <ImageView 
     [...] 
     android:id="@+id/myimage"/> 
    <TextView 
     [...]    
     android:id="@+id/mytext"/> 
</LinearLayout> 

는 그런 다음 BaseAdapter를 만들 :

관련 문제