2010-04-02 4 views
0

Я создал пользовательское listview, которое содержит Imageview + TextView + Checkbox Теперь моя проблема в том, что я должен установить флажок, который указан в этой строке.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> 

и адаптер:

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')? –

+0

Пожалуйста, распечатайте журнал. –

ответ

0

вы должны использовать интерфейс OnItemClickListner, чтобы проверить, какой элемент списка выбран.

как:

class youractivity extends Activity implements OnItemClickLister 

и установить слушатель в ListView

listview_object.setOnItemClicklistener(this); 

переопределение в OnItemClick метод, как:

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

вот и все.

0

проверил GetView(), и в этом проверяется, если заявление написано ниже

Я thinked, что это что-то неправильно, если заявление

 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

0

линии

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

вызывает у вас NPE.

Вы не устанавливаете тег, но пытаетесь его восстановить.

В противном случае просто используйте

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

, чтобы найти его просмотра.

Если вы хотите использовать метод findViewWithTag(), тогда сначала нужно установить тег checkboxnumberScramble.setTag(tag), чтобы впоследствии вы его могли получить.