Android - 如何遍历列表视图?

时间:2011-03-17 23:32:59

标签: android listview android-activity radio-button loops

我有一个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();
}

3 个答案:

答案 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,都要更改列表后面的数据,以确定是否需要检查无线电。