問題の解決策を探しましたが、見つかりませんでした。ここにあります。
textviewとチェックボックスの組み合わせを使用して表示するデータの配列リストがあります。これは、基本的に行ごとに膨らませるカスタムアダプタを使用して行われます。チェックされたデータを取得するまでは、これまでのすべてで問題ありません。
私が他の人から読んだことは、ビューのリサイクルのために、スクロールするとチェックボックスがオフになるということです。私の場合、チェックボックスの状態は残りますが、スクロールせずにチェックボックスを解除する方法がわかりません。チェックボックスをオンにすると、UIで「チェック」されますが、チェックされたアイテムをスクロールして表示から外し、再び元に戻すまで、実際には認識されません。
現在、list.get(position).isSelected()== trueの場合、グローバル配列リストを使用してlist.get(position).getName()を入力します。ただし、アイテムをスクロールして非表示にしてから元に戻さない限り、この配列リストは空のままです。チェックボックスがオフの場合も同じことが当てはまり、スクロールするまで配列リストに残ります。私が念頭に置いているのは、チェックボックスがクリックされたときにすべてのチェックボックスの現在の状態を取得し、配列リストを作成する送信ボタンです。
そのようなものを作成する方法はありますか?
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.qlist, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) viewHolder.checkbox.getTag();
//
if(isChecked){
selctionCount++;
}
else if (!isChecked){
selctionCount--;
}
if(selctionCount > 2)
{
Toast.makeText(context, "error, you checked more than 2!", Toast.LENGTH_LONG).show();
element.setSelected(false);
}
else
{
element.setSelected(buttonView.isChecked());
}
System.out.println(selctionCount);
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
}
else {
view = convertView;
((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
//This is the problem here! the selected arraylist (global) is empty even when i check the boxes,
//it only populates when i scroll the checked boxes out of view and back in! helphelp!
holder.checkbox.setChecked(list.get(position).isSelected());
if (list.get(position).isSelected() == true){
selected.add(list.get(position).getName());
}
else if (list.get(position).isSelected() == false){
selected.remove(list.get(position).getName());
}
return view;
}
}