我有一个ListActivity,列表中的每一行包含2个TextViews和4个RadioButtons。
从SimpleCursorAdapter中填充2个TextViews,从我的数据库中的表中提取数据,并将4个RadioButton放入xml代码中(其ID分配给Java代码中的4个RadioButton变量。
基本上我想做的是检查每行中每个单选按钮的状态,以相应地更新我的数据库。
我如何访问RadioButtons的每一行以检查它们是否被检查?
如果这很模糊,我道歉,如果需要,我会尝试添加更多细节。
非常感谢。
private void processAttendance(){
int index = 0;
this.allStudentsCursor = mDbHelper.fetchEnrolledStudents(mRowId);
lvList=(ListView)findViewById(android.R.id.list);
this.allStudentsCursor.moveToFirst();
while (allStudentsCursor.isAfterLast() == false) {
this.radGroup = (RadioGroup) lvList.getChildAt(index).findViewById(R.id.attendanceGroup);
this.mAttended = (RadioButton)lvList.getChildAt(index).findViewById(R.id.presentRadio);
this.mLate = (RadioButton)lvList.getChildAt(index).findViewById(R.id.lateRadio);
this.mExcused = (RadioButton)lvList.getChildAt(index).findViewById(R.id.excusedRadio);
this.mMissed = (RadioButton)lvList.getChildAt(index).findViewById(R.id.absentRadio);
this.mStudentId = allStudentsCursor.getLong(allStudentsCursor.getColumnIndexOrThrow("_id"));
this.mResult = "";
if(mAttended.isChecked()){
this.mResult ="attended";
radGroup.clearCheck();
}
else if(mExcused.isChecked()){
this.mResult ="excused";
}
else if(mMissed.isChecked()){
this.mResult ="missed";
}
else {
this.mResult ="late";
}
Calendar cal = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
String date = dateFormat.format(cal.getTime());
this.mDbHelper.addAttendance(date, this.mResult, this.mStudentId, mRowId);
allStudentsCursor.moveToNext();
index++;
}
finish();
}
答案 0 :(得分:3)
这基本上是有缺陷的--LinView不会为每一行夸大不同的布局视图层次结构,它只保留足以填满屏幕。当一个滚动边缘时,它会被重新用于显示滚动的下一个数据。
列表中每行内的数据必须来自光标中的数据。如果不是,它会在滚出屏幕时丢失。
答案 1 :(得分:2)
您必须遍历Cursor
。
myCursor.moveToFirst();
/* Loop over all items */
while (myCursor.isAfterLast() == false) {
//get radio button
RadioButton myRadioButton = (RadioButton) findViewById(R.id.radiobutton);
/*
Edit or Check myRadioButton
*/
myCursor.moveToNext();
}
这是一个快速示例,仅显示一个RadioButton
,但您可以了解相关信息。
答案 2 :(得分:1)
你做不到。视图在列表视图中被回收,因此如果您在列表中说出20个项目,则实际上可能只有5个RadioButton实例。一旦视图离开屏幕,它就会被回收。
您需要做的是,无论何时单击RadioButton,都要更改列表后面的数据,以确定是否需要检查无线电。