리스트뷰에 이해도가 높으면 간단한데요.
리스트뷰는 일반적으로 어댑터를 가져다 사용하는데 -ex) listView.setAdapter(list);
어댑터쪽에 보면 getView라는 메소드를 오버라이드 하도록 되어 있습니다.
getView라는 건 리스트뷰의 하나의 항목을 리턴하는 건데요.
위의 캡쳐처럼 된다면 4개의 항목, 즉 4번의 getView가 호출되어 리스트뷰를 구성하는 겁니다.
따라서 getView메소드 안에 항목을 구성할 레이아웃을 커스터마이징 하면 손쉽게 만들 수 있죠.
물론 왜 저걸 굳이 리스트뷰로 만드시는지는 모르겠지만 ^^;
getView 소스는 대충 이렇습니다.
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder gridViewHolder;
if(convertView == null){
view = mGalleryActivity.getLayoutInflater().inflate(R.layout.gallery_thumbnail_item, parent, false);
gridViewHolder = new ViewHolder();
gridViewHolder.imageView = (ImageView) view.findViewById(R.id.thumbnail_image);
gridViewHolder.imageView.setMaxWidth(80);
gridViewHolder.imageView.setMaxHeight(80);
view.setTag(gridViewHolder);
}else{
gridViewHolder = (ViewHolder) view.getTag();
}
레이아웃 인플레이터로 XML파일을 전개하는 코드가 있지요.
즉, 리스트 뷰의 항목 화면을 xml로 만드는겁니다.
질문자처럼 4개 각각 다른 항목을 구성하고 싶으시다면
xml안에 그림, 토글, 텍스트,,, 등의 뷰들을 작성하고
getView에서 전달받은 파라미터인 position 값에 따라 그림을 보여줄지 말지,
토글을 보여줄지 말지 등등을 설정하면됩니다.
position은 항목 인덱스 이고, 0일때 첫번째 항목, 1일때 두번째 항목.. 입니다.
그래서 position이 0일때 그림은 VISIBLE 하면 되고 텍스트랑 토글은 GONE이나 INVISIBLE하면 될듯.