目标
出于学习目的,我创建了custom list view
5 items
。 Each Item
将有question, choices, check
按钮。
@Override
public View getView(int pos, View row, ViewGroup parent){
this.view = row;
ViewHolder viewHolder = null;
if(row == null) {
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(R.layout.list_item_row_qs, null);
viewHolder = new ViewHolder();
viewHolder.chapName=(TextView) row.findViewById(R.id.question);
viewHolder.rb0 = (RadioButton) row.findViewById(R.id.choice0);
viewHolder.rb1 = (RadioButton) row.findViewById(R.id.choice1);
viewHolder.rb2 = (RadioButton) row.findViewById(R.id.choice2);
viewHolder.rb3 = (RadioButton) row.findViewById(R.id.choice3);
viewHolder.button = (Button) row.findViewById(R.id.check);
row.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder)row.getTag();
}
viewHolder.chapName.setText(questions[pos].getQuestionDescr());
viewHolder.rb0.setText(questions[pos].getChoice()[0]);
viewHolder.rb1.setText(questions[pos].getChoice()[1]);
viewHolder.rb2.setText(questions[pos].getChoice()[2]);
viewHolder.rb3.setText(questions[pos].getChoice()[3]);
//viewHolder.button.setId(pos);
//viewHolder.rg.setId(pos);
/* viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(context, ((RadioButton) view.findViewById(((RadioGroup) view.findViewById(R.id.rg)).getCheckedRadioButtonId()))+"", Toast.LENGTH_LONG).show();
}
});*/
return row;
}
这是我设置项目的方式。如您所见,我在视图持有者中有TextView, 1 radio group, 4 radio button, 1 button
。
Question
是一个包含每行所有内容的类。所以我通过array of question objects to this adapter
。
疑
当用户点击检查按钮时,它必须找到所选的单选按钮并检查答案。答案也将成为问题类的一部分。结果。
我该怎么做?我坚持这个。我无法找到如何链接它?
如果是html
,我可以为保留Id
的{{1}}设置div
,点击按钮,我将获得父ID和父ID可以选择单选按钮,我可以根据所选值检查存储的答案。
更多解释
row item
这就是我的布局的样子。正如您在我的 Question1
choice0 choice1
choice2 choice3
CHECK
Question2
choice0 choice1
choice2 choice3
CHECK
Question3
choice0 choice1
choice2 choice3
CHECK
Question4
choice0 choice1
choice2 choice3
CHECK
Question5
choice0 choice1
choice2 choice3
CHECK
方法中看到的那样,我为布局本身的元素提供了getView
。因此所有元素都需要相同的Id :(
有什么建议吗?
答案 0 :(得分:0)
OnClick
通过了点击的View
,即"检查"按钮。
所以你可以这样做:
public void onClick(View v) {
View rowView = (ViewGroup) v.getParent();
RadioGroup group = (RadioGroup) rowView.findViewById(R.id.rg);
long selectedId = group.getCheckedRadioButtonId();
// Check if selected id is correct
Toast.makeText(context, "Correct!", Toast.LENGTH_LONG).show();
}
此外,由于OnClick
代码相同,因此最好只创建一次并在创建ViewHolder
时将其连接起来。