これが私の状況です。
私が持っているもの:右上とカスタム要素のリストの下にチェックボックス(「checkAll」と呼ばれる)があるアクティビティ:TextViewとチェックボックス。
私が欲しいもの:checkAllをクリックすると、リスト内の各項目のすべてのチェックボックスがオンになります。
問題:リストのすべての項目が画面に表示されている場合にのみ、すべてが正常に機能します。多くの要素(たとえば20)を含むリストがある場合、checkAll myappCrashをクリックすると。LogCatは私に言います:行のNullPointerException
CheckBox checkBoxInTheItemList = (CheckBox)
mList.getChildAt(i).findViewById(R.id.checkBox);
これは私の機能です:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_layout_select_friend);
checkAll =(CheckBox)findViewById(R.id.checkBoxAll);
checkAll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if((checkAll.isChecked())){
for(int i=1;i<peopleSize;i++){//for each element of my array of Person
mList=(ListView) findViewById(R.id.list); //This is the id of my List
//in the list_layout_select_friend
CheckBox checkBoxInTheItemList = (CheckBox)
mList.getChildAt(i).findViewById(R.id.checkBox); //i try to get
//for each item of the List the relative checkBox.
checkBoxInTheItemList.setChecked(true);//Now i checked the checkBox
}
}
}
});
}
編集:これは私のアダプタであり、メソッドgetViewもあります
public class NewQAAdapterSelectFriends extends BaseAdapter {
private LayoutInflater mInflater;
private Person[] data;
public NewQAAdapterSelectFriends(Context context) {
mInflater = LayoutInflater.from(context);
}
public void setData(Person[] data) {
this.data = data;
}
@Override
public int getCount() {
return data.length;
}
@Override
public Object getItem(int item) {
return data[item];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item_select_friends, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.nameText=(TextView) convertView.findViewById(R.id.personName);
viewHolder.surnameText=(TextView) convertView.findViewById(R.id.personSurname);
viewHolder.contactImage=(ImageView) convertView.findViewById(R.id.personImage);
viewHolder.checkBox=(CheckBox)convertView.findViewById(R.id.checkBox);
convertView.setTag(viewHolder);
viewHolder.nameText.setTag(viewHolder.nameText);
viewHolder.nameText.setTag(viewHolder.surnameText);
viewHolder.contactImage.setTag(data[position]);
viewHolder.checkBox.setTag(data[position]);// is correct this line??????
} else {
}
ViewHolder holder = (ViewHolder) convertView.getTag();
holder.nameText.setText(data[position].getName());
holder.surnameText.setText(data[position].getSurname());
holder.contactImage.setImageResource(data[position].getPhotoRes());
holder.contactImage.setScaleType(ScaleType.FIT_XY);
//here i have to write something for the checkbox, right?
return convertView;
}
static class ViewHolder {
TextView nameText;
TextView surnameText;
ImageView contactImage;
CheckBox checkBox;
}
この問題を回避するにはどうすればよいですか?非表示の要素を持つ大きなリストのすべてのチェックボックスをオンにするにはどうすればよいですか?