私は、チェックボックスとテキストビューで構成されるカスタムリストビューを持っています。何らかの理由でListActivityを使用できません。リストビューを使用するのはかなり簡単ですが、なぜチェックボックスが異なって動作しているのかわかりません。リストビューの期待しない動作のAndroidチェックボックス
まず、私は次の行を削除する場合さて、チェックボックスの動作があれば、たとえば、奇妙な取得します**私のアダプタの一部である
private static class ViewHolder { //My View Hold
TextView tvParentGradeName;
CheckBox cbParentClassesOfGrades;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// Get the data item for this position
final ClassModelInfo user = getItem(position);
// Check if an existing view is being reused, otherwise inflate the view
final ViewHolder viewHolder; // view lookup cache stored in tag
if (convertView == null) {
// If there's no view to re-use, inflate a brand new view for row
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(resourceLayout, parent, false);
viewHolder.tvParentGradeName = (TextView) convertView.findViewById(R.id.tvParentGradeName);
viewHolder.cbParentClassesOfGrades = (CheckBox) convertView.findViewById(R.id.cbParentClassesOfGrades);
convertView.setTag(viewHolder);
viewHolder.cbParentClassesOfGrades.setChecked(false);
//Following list consist of ids of items whoes check box are checked alredy
if(selectedItemsList!= null && selectedItemsList.size()>0){
for(int i = 0 ; i<selectedItemsList.size();i++){
if(user.getClassID().matches(""+selectedItemsList.get(i))){
viewHolder.cbParentClassesOfGrades.setChecked(true);
}
}
}
viewHolder.cbParentClassesOfGrades.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
listClass.get(getPosition).setSetSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
// if(callback!=null)
// callback.checkBoxChecked();
if (isChecked) {
selectedItemsList.add(Integer.parseInt(user.getClassID()));
} else {
// selectedItemsList.remove(classsLevelClickedItems.getId());
Iterator<Integer> myItr = selectedItemsList.iterator();
while (myItr.hasNext()) {
Integer id = myItr.next();
System.out.println("Next name is: " + id);
if (id == Integer.parseInt(user.getClassID())) {
myItr.remove();
}
}
}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.tvParentGradeName, viewHolder.tvParentGradeName);
convertView.setTag(R.id.cbParentClassesOfGrades, viewHolder.cbParentClassesOfGrades);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.cbParentClassesOfGrades.setTag(position); // This line is important.
viewHolder.tvParentGradeName.setText(user.getClassName()+" ("+gradeDictionary.get(Integer.parseInt(user.getGradeID()))+")");
viewHolder.cbParentClassesOfGrades.setChecked(user.isSetSelected());
return convertView;
}
以下、私はあなたに私がやっている何のアイデアを与えてみましょう私は、第四のチェックボックスをチェックして、リストビューをスクロール開始私が来ているチェックボックスがすでに確認されていることがわかります、私はそのような行動が何であるかを知らない**
viewHolder.cbParentClassesOfGrades.setTag(位置) ; //この行は重要です。 viewHolder.tvParentGradeName.setText(user.getClassName()+ ">(" + gradeDictionary.get(Integer.parseInt(user.getGradeID()))+ ")"); viewHolder.cbParentClassesOfGrades.setChecked(user.isSetSelected());
だから、基本的に、私は以下のの上に私の最大の問題点を述べてきたように、チェックボックスで一貫性のあるリストビューを作成する方法をいくつかの質問
1)があり、私は、リストビューが
をクリックされたボックスをチェックし、正確に覚えておく必要があります意味します2)リストビューの行全体でクリックリスナーを作成するには、アイテムをクリックしてチェックボックスをオン(チェックとアンチェック)して、ユーザーがチェックボックスを特にチェックする必要はありません。
どうすれば改善できるのですか教えてください。これは私の日を取っている。
注:私はたくさんその問題を検索しましたし、私のコードでのコメントと行は、私はネットからコピーしたものです。
これは奇妙な動作ではありません。これは、行がリストビューで再利用されるため、意図された動作です。これを解決するには、チェックされた位置を保存する必要があります。行を膨らませると位置が確認され、それに応じて進んでください。 –
私にその方法を示すことができます –
http://techlovejump.com/android-listview-with-checkbox/このリンクを確認してください。それは仕事の半分しか示していませんが。モデルのクラスのその位置を保存する必要がありますチェックボックスのクリック –