2010-04-02 5 views
0

J'ai créé une liste personnalisée qui contient ImageView + TextView + Checkbox Maintenant, mon problème est que je dois obtenir quelle case est cochée.Android Custom Listview

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> 

et adaptateur est:

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

je reçois exception sur onCreate de mon activité.

+0

Quelle est l'exception (coller à partir de votre 'adb logcat')? –

+0

Veuillez imprimer le logerror. –

Répondre

0

vous devez utiliser l'interface OnItemClickListner pour vérifier quel élément de liste est sélectionné.

comme:

class youractivity extends Activity implements OnItemClickLister 

et mettre l'auditeur à votre listview

listview_object.setOnItemClicklistener(this); 

remplacer la méthode OnItemClick comme:

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

c'est tout.

0

vérifié GetView() et dans ce vérifié si la déclaration écrite ci-dessous

Je Pensé qu'il est quelque chose de mal si la déclaration

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

vous avez utilisé

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

Mais il utilise l'argument de la méthode 'onCheckedChanged', qui devrait aussi fonctionner. Mais je l'aurais codé 'setCheckboxflag (isChecked);' pourquoi utiliser une instruction if pour définir une valeur booléenne? – Anders

0

La ligne

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

vous causant NPE.

Vous ne définissez pas de balise mais vous essayez de le récupérer.

Sinon, utilisez simplement

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

pour trouver voir.

Si vous souhaitez utiliser la méthode findViewWithTag(), vous devez d'abord définir la variable avec checkboxnumberScramble.setTag(tag) afin de pouvoir la récupérer plus tard.