2010-04-02 132 views
0

我已經創建了自定義列表視圖,其中包含Imageview + TextView +複選框 現在我的問題是,我必須得到哪一行的複選框被選中。Android自定義列表視圖

的Xml row.xml

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout android:id="@+id/LinearLayout01" 
    android:orientation="horizontal" android:layout_width="fill_parent" 
    android:gravity="center_vertical" android:layout_height="60dip"> 

    <LinearLayout android:id="@+id/LinearLayout03" 
     android:orientation="vertical" android:gravity="center_vertical" 
     android:layout_marginLeft="10dip" android:layout_height="60dip" 
     android:layout_width="260dip"> 

     <TextView android:id="@+id/desc" android:layout_width="fill_parent" 
      android:layout_height="40dip" android:ellipsize="marquee" 
      android:text="Text" android:textSize="20dip" android:textStyle="bold" 
      android:gravity="center_vertical" android:textColor="@color/black" /> 
     <TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="Phone number" 
      android:id="@+id/phone_no" android:textColor="@color/black"></TextView> 

    </LinearLayout> 
    <LinearLayout android:id="@+id/LinearLayout02" 
     android:layout_width="fill_parent" android:gravity="center_vertical" 
     android:layout_height="60dip"> 

     <CheckBox android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:id="@+id/chk_number"></CheckBox> 
    </LinearLayout> 
</LinearLayout> 

和適配器是:

class ContactList extends ArrayAdapter{ 

    Activity context; 
    public ContactList(Activity context) { 
     super(context, R.layout.row,names); 
     this.context = context; 
    } 

public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View row = inflater.inflate(R.layout.row, null); 

    TextView Name = (TextView) row.findViewById(R.id.desc); 
    TextView Number = (TextView) row.findViewById(R.id.phone_no); 
    Name.setText(names.get(position)); 
    Number.setText(numbers.get(position)); 

    CheckBox checkboxnumberScramble = (CheckBox) row.findViewWithTag(R.id.chk_number); 
    checkboxnumberScramble.setChecked(true); 
    checkboxnumberScramble.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 

      if (isChecked) { 
       setCheckboxflag(true); 
      }else{ 
       setCheckboxflag(false); 
      } 
     } 
    }); 

    return (row); 
    } 
} 

我得到的異常在我活動的onCreate。

+0

什麼是例外(從'adb logcat'粘貼)? – 2010-04-02 14:13:03

+0

請打印logerror。 – 2011-10-01 04:34:58

回答

0

您必須使用OnItemClickListner界面來檢查選擇了哪個列表項。

,如:

class youractivity extends Activity implements OnItemClickLister 

,並設置監聽到你的列表視圖

listview_object.setOnItemClicklistener(this); 

覆蓋的OnItemClick方法,如:

@Override 
OnItemClick(){ 
    //what you want to do? that is here 
} 

多數民衆贊成。

0

檢查getview(),並在此檢查的if語句下面寫

我鑫卡特,這是什麼問題在if語句

 if (isChecked) //--> (isChecked) not contain the Checkbox name 
    { 
     setCheckboxflag(true); 
    } 
    else 
    { 
     setCheckboxflag(false); 
    } 

您使用

if (checkBoxName.isChecked) //--> it contain checkBoxName 
{ 
    setCheckboxflag(true); 
} 
else 
{ 
    setCheckboxflag(false); 
} 
+0

但他正在使用onCheckedChanged方法的參數,該方法也應該可以工作。但我會編碼它'setCheckboxflag(isChecked);'爲什麼使用if語句來設置一個布爾值? – Anders 2012-06-27 23:41:54

0

CheckBox checkboxnumberScramble = (CheckBox)row.findViewWithTag(R.id.chk_number); 

導致你NPE。

您沒有設置標籤,但您正試圖檢索它。

否則只需使用

CheckBox checkboxnumberScramble = (CheckBox)row.findViewWithId(R.id.chk_number); 

找到它查看。

如果您想要使用findViewWithTag()方法,那麼首先必須將標記設置爲checkboxnumberScramble.setTag(tag),以便稍後可以檢索它。