안녕하세요.. 이제 막 안드로이드를 시작한 초보입니다.
책 예제를 보면서 공부하고있는데 이해가 안되는 부분이 있어요.

글을 적어 올렸다가.. 아무래도 글 자체도 산만하고 코드도 정리가 안되어있어서 수정해 올립니다;;

사용자 정의 Array Adapter를 사용하는데, 리스트 레이아웃 xml 파일에 ImageView나 TextView만 넣었을 경우에는
onListItemClick 메소드의 내용이 실행이 되는데, RatingBar를 넣을 경우에는 메소드 내용이 실행이 안됩니다.

리스트 레이아웃에는 RatingBar와 TextView가 있는데요, 리스트를 클릭할 때 TextView의 내용이
main.xml 파일의 TextView에 보여지는 형식입니다.
이 때, 리스트 레이아웃 xml 파일에 ImageView와 TextView만 넣어서 실행할 때는,
List를 클릭할 때 TextView에 클릭한 list의 TextView의 내용이 나오는데
RatingBar를 넣을 경우에는 RatingBar의 값은 조절이 되는데 리스트 클릭이 안되네요.

그런데 onListItemClick 메소드의 내용을 RateListDemo.java 의 getView() 메소드 내의
RatingBar.OnRatingBarChangeListener 내에 넣으면 실행이 됩니다.
onListItemClick 메소드는 리스트 아이템을 클릭했을 경우의 이벤트이고
onRatingBarChangeListener는 RatingBar의 값이 변경됬을 경우의 이벤트이긴 하지만..

왜 RatingBar가 들어갔을 경우에는, 리스트 아이템 클릭시에 TextView가 변경되지 않는걸까요??
아래는 제가 보고있는 예제의 전체 소스입니다.
부탁드립니다.

-------------------------------------------------------------------------------------------------------------
[main.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" >
 <TextView
  android:id="@+id/selection"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"/>
 <ListView
  android:id="@android:id/list"
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent"
  android:drawSelectorOnTop="false"
  />
</LinearLayout>

-------------------------------------------------------------------------------------------------------------
[row.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="horizontal">
 <RatingBar
  android:id="@+id/rate"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:numStars="3"
  android:stepSize="1"
  android:rating="2" />
 <TextView
  android:id="@+id/label"
  android:paddingLeft="2px"
  android:paddingRight="2px"
  android:paddingTop="2px"
  android:textSize="40sp"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"/>
</LinearLayout>

-------------------------------------------------------------------------------------------------------------
[RateListDemo.java]

package com.RateList; 
import android.app.Activity;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RatingBar;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
public class RateListDemo extends ListActivity {
 TextView selection;
 String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
     "consectetuer", "adipiscing", "elit", "morbi", "vel",
     "ligula", "vitae", "arcu", "aliquet", "mollis",
     "etiam", "vel", "erat", "placerat", "ante",
     "porttitor", "sodales", "pellentesque", "augue",
     "purus"};
 
 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);
  
  ArrayList<RowModel> list=new ArrayList<RowModel>();
  
  for (String s : items) {
   list.add(new RowModel(s));
  }
  
  setListAdapter(new CheckAdapter(this, list));
  selection=(TextView)findViewById(R.id.selection);
 }
 
 private RowModel getModel(int position) {
  return(((CheckAdapter)getListAdapter()).getItem(position));
 }
 
 public void onListItemClick(ListView parent, View v, int position, long id) {
   selection.setText(getModel(position).toString());
 }
 
 class CheckAdapter extends ArrayAdapter<RowModel> {
  Activity context;
  
  CheckAdapter(Activity context, ArrayList<RowModel> list) {
   super(context, R.layout.row, list);
   
   this.context=context;
  }
  
  public View getView(int position, View convertView,
            ViewGroup parent) {
   View row=convertView;
   ViewWrapper wrapper;
   RatingBar rate;         
             
   if (row==null) {  
    LayoutInflater inflater=context.getLayoutInflater();
    
    row=inflater.inflate(R.layout.row, null);
    wrapper=new ViewWrapper(row);
    row.setTag(wrapper);
    rate=wrapper.getRatingBar();
    
    RatingBar.OnRatingBarChangeListener l=
          new RatingBar.OnRatingBarChangeListener() {
     public void onRatingChanged(RatingBar ratingBar,
                    float rating,
                    boolean fromTouch) {
      Integer myPosition=(Integer)ratingBar.getTag();
      RowModel model=getModel(myPosition);
      
      model.rating=rating;
     
      LinearLayout parent=(LinearLayout)ratingBar.getParent();
      TextView label=(TextView)parent.findViewById(R.id.label);
    
      label.setText(model.toString());
     }
    };
    
    rate.setOnRatingBarChangeListener(l);
   }
   else {
    wrapper=(ViewWrapper)row.getTag();
    rate=wrapper.getRatingBar();
   }
   RowModel model=getModel(position);
   
   wrapper.getLabel().setText(model.toString());
   rate.setTag(new Integer(position));
   rate.setRating(model.rating);
   
   return(row);
  }
 }
 
 class RowModel {
  String label;
  float rating=2.0f;
  
  RowModel(String label) {
   this.label=label;
  }
  
  public String toString() {
   if (rating>=3.0) {
    return(label.toUpperCase());
   }
   
   return(label);
  }
 }
}

-------------------------------------------------------------------------------------------------------------
[ViewWrapper .java]

package com.RateList; 
import android.view.View;
import android.widget.RatingBar;
import android.widget.TextView;
class ViewWrapper {
 View base;
 RatingBar rate=null;
 TextView label=null;
 
 ViewWrapper(View base) {
  this.base=base;
 }
 
 RatingBar getRatingBar() {
  if (rate==null) {
   rate=(RatingBar)base.findViewById(R.id.rate);
  }
  
  return(rate);
 }
 
 TextView getLabel() {
  if (label==null) {
   label=(TextView)base.findViewById(R.id.label);
  }
  
  return(label);
 }
}

-------------------------------------------------------------------------------------------------------------