装满单选按钮组一个ListView与适配器一个onClick监听器 [英] Fill a ListView with radio button groups with an onClick listener in the Adapter
本文介绍了装满单选按钮组一个ListView与适配器一个onClick监听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我填补我的ListView与我的适配器,但我的单选按钮,最后一组无法正常工作。
当我选择的前三个元素的选择,效果很好。当pressed最后一个单选按钮不起作用。
这是我的适配器
公共类ScoreAdapter延伸BaseAdapter {
私人活动活动;
私人LayoutInflater吹气;
私人列表<分值GT;项目;
私人资源的资源;公共ScoreAdapter(活动活动,列表与LT;分数>项目){
this.activity =活动;
this.items =物品;
this.inflater =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
资源= activity.getResources();
}@覆盖
公众诠释的getCount(){
返回items.size();
}@覆盖
公共对象的getItem(INT位置){
返回items.get(位置);
}@覆盖
众长getItemId(INT位置){
返回的位置;
}公开名单<分值GT; getItems(){
返回的物品;
}公共分数getScore(INT位置){
回报((分数)的getItem(位置));
}私有静态类ViewHolder {
TextView的名称;
单选radioTop,radioMiddle,radioLow;
}@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
ViewHolder持有人; 如果(convertView == NULL){
convertView = inflater.inflate(R.layout.item_survey,空,假);
持有人=新ViewHolder(); holder.name =(TextView中)convertView.findViewById(R.id.txtName);
holder.radioTop =(单选)convertView.findViewById(R.id.radioTop);
holder.radioMiddle =(单选)convertView.findViewById(R.id.radioMiddle);
holder.radioLow =(单选)convertView.findViewById(R.id.radioLow); convertView.setTag(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
} 得分项= items.get(位置); holder.name.setText(item.getQuestionName()); holder.radioTop.setOnClickListener(监听);
holder.radioTop.setText(item.getTopDescription());
holder.radioTop.setChecked(item.isTopScoreSelected());
holder.radioTop.setTag(位置); holder.radioMiddle.setOnClickListener(监听);
holder.radioMiddle.setText(item.getMiddleDescription());
holder.radioMiddle.setChecked(item.isMiddleScoreSelected());
holder.radioMiddle.setTag(位置); holder.radioLow.setOnClickListener(监听);
holder.radioLow.setText(item.getLowDescription());
holder.radioLow.setChecked(item.isLowScoreSelected());
holder.radioLow.setTag(位置);
返回convertView;
}RadioButton.OnClickListener监听器=新RadioButton.OnClickListener(){ @覆盖
公共无效的onClick(查看视图){
RadioGroup中组=(RadioGroup中)view.getParent();
单选按钮单选=(单选)查看; 比分选= getScore((整数)radio.getTag()); 如果(selected.getQuestionNumber()== 11&放大器;及(radio.getId()== R.id.radioTop || radio.getId()== R.id.radioLow)){
DialogFragment模式=新MomentOfTruthDialog(选择);
modal.show(activity.getFragmentManager(),motModal);
} selected.setTopScoreSelected(假);
selected.setMiddleScoreSelected(假);
selected.setLowScoreSelected(假); 开关(radio.getId()){
案例R.id.radioTop:
radio.setChecked(真);
selected.setTopScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.TOP_SCORE_VALUE));
打破;
案例R.id.radioMiddle:
radio.setChecked(真);
selected.setMiddleScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.MIDDLE_SCORE_VALUE));
打破;
案例R.id.radioLow:
radio.setChecked(真);
selected.setLowScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.LOW_SCORE_VALUE));
打破;
}
}
};
}
这是我的模板项目
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_marginBottom =6DIP
机器人:背景=@绘制/阴影
机器人:方向=垂直><的TextView
机器人:ID =@ + ID / txtName的
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:背景=@绘制/ back_for_header
机器人:比重=中心
机器人:填充=6DIP
机器人:文字颜色=#FFF
机器人:TEXTSIZE =18sp/>< RadioGroup中
机器人:ID =@ + ID / radioGroupSurvey
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT> <的TextView
风格=@风格/ Survey_Label_For_TextView
机器人:文字=@字符串/ top_label/> <单选
机器人:ID =@ + ID / radioTop
风格=@风格/ Survey_RadioButton/> <的TextView
风格=@风格/ Survey_Label_For_TextView
机器人:文字=@字符串/ middle_label/> <单选
机器人:ID =@ + ID / radioMiddle
风格=@风格/ Survey_RadioButton/> <的TextView
风格=@风格/ Survey_Label_For_TextView
机器人:文字=@字符串/ low_label/> <单选
机器人:ID =@ + ID / radioLow
风格=@风格/ Survey_RadioButton/>< / RadioGroup中>
< / LinearLayout中>
解决方案
谢谢,我解决我的问题。
这是我的适配器现在:
公共类ScoreAdapter延伸BaseAdapter {
私人活动活动;
私人LayoutInflater吹气;
私人列表<分值GT;项目;
私人资源的资源;公共ScoreAdapter(活动活动,列表与LT;分数>项目){
this.activity =活动;
this.items =物品;
this.inflater =(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
资源= activity.getResources();
}@覆盖
公众诠释的getCount(){
返回items.size();
}@覆盖
公共对象的getItem(INT位置){
返回items.get(位置);
}@覆盖
众长getItemId(INT位置){
返回的位置;
}公开名单<分值GT; getItems(){
返回的物品;
}私有静态类ViewHolder {
TextView的名称;
RadioGroup中radioGroup中;
单选radioTop,radioMiddle,radioLow;
}@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
ViewHolder持有人; 如果(convertView == NULL){
convertView = inflater.inflate(R.layout.item_survey,空,假);
持有人=新ViewHolder(); holder.name =(TextView中)convertView.findViewById(R.id.txtName);
holder.radioGroup =(RadioGroup中)convertView.findViewById(R.id.radioGroupSurvey);
holder.radioTop =(单选)convertView.findViewById(R.id.radioTop);
holder.radioMiddle =(单选)convertView.findViewById(R.id.radioMiddle);
holder.radioLow =(单选)convertView.findViewById(R.id.radioLow); convertView.setTag(保持器);
}其他{
支架=(ViewHolder)convertView.getTag();
} 评分项目=(分数)的getItem(位置); holder.name.setText(item.getQuestionName()); holder.radioGroup.setOnCheckedChangeListener(NULL); holder.radioTop.setText(item.getTopDescription());
holder.radioTop.setChecked(item.isTopScoreSelected());
holder.radioMiddle.setText(item.getMiddleDescription());
holder.radioMiddle.setChecked(item.isMiddleScoreSelected());
holder.radioLow.setText(item.getLowDescription());
holder.radioLow.setChecked(item.isLowScoreSelected()); holder.radioGroup.setTag(位置);
holder.radioGroup.setOnCheckedChangeListener(监听); 返回convertView;
}RadioGroup.OnCheckedChangeListener监听器=新RadioGroup.OnCheckedChangeListener(){
@覆盖
公共无效onCheckedChanged(RadioGroup中radioGroup中,INT ID){ 单选按钮单选=(单选)radioGroup.findViewById(radioGroup.getCheckedRadioButtonId()); 得分选择=(分数)的getItem((整数)radioGroup.getTag());
布尔showMOT = FALSE; selected.setTopScoreSelected(假);
selected.setMiddleScoreSelected(假);
selected.setLowScoreSelected(假); radio.setChecked(真);
radio.setSelected(真);
开关(ID){
案例R.id.radioTop:
showMOT = TRUE;
selected.setTopScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.TOP_SCORE_VALUE));
打破;
案例R.id.radioMiddle:
selected.setMiddleScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.MIDDLE_SCORE_VALUE));
打破;
案例R.id.radioLow:
showMOT = TRUE;
selected.setLowScoreSelected(真);
selected.setScoreSelected(resources.getInteger(R.integer.LOW_SCORE_VALUE));
打破;
} 如果(selected.getQuestionNumber()== 11&放大器;&放大器; showMOT)
showDialogMOT(选择);
}
};私人无效showDialogMOT(分数分数){
DialogFragment模式=新MomentOfTruthDialog(分);
modal.show(activity.getFragmentManager(),motModal);
}
}
I fill my ListView with my Adapter but my last group of radio buttons are not working correctly.
When I select the options of the first three elements, it works well. The last radio button does not work when pressed.
This is my adapter
public class ScoreAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Score> items;
private Resources resources;
public ScoreAdapter(Activity activity, List<Score> items) {
this.activity = activity;
this.items = items;
this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
resources = activity.getResources();
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int location) {
return items.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
public List<Score> getItems() {
return items;
}
public Score getScore(int position) {
return ((Score) getItem(position));
}
private static class ViewHolder {
TextView name;
RadioButton radioTop, radioMiddle, radioLow;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_survey, null, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.txtName);
holder.radioTop = (RadioButton) convertView.findViewById(R.id.radioTop);
holder.radioMiddle = (RadioButton) convertView.findViewById(R.id.radioMiddle);
holder.radioLow = (RadioButton) convertView.findViewById(R.id.radioLow);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Score item = items.get(position);
holder.name.setText(item.getQuestionName());
holder.radioTop.setOnClickListener(listener);
holder.radioTop.setText(item.getTopDescription());
holder.radioTop.setChecked(item.isTopScoreSelected());
holder.radioTop.setTag(position);
holder.radioMiddle.setOnClickListener(listener);
holder.radioMiddle.setText(item.getMiddleDescription());
holder.radioMiddle.setChecked(item.isMiddleScoreSelected());
holder.radioMiddle.setTag(position);
holder.radioLow.setOnClickListener(listener);
holder.radioLow.setText(item.getLowDescription());
holder.radioLow.setChecked(item.isLowScoreSelected());
holder.radioLow.setTag(position);
return convertView;
}
RadioButton.OnClickListener listener = new RadioButton.OnClickListener() {
@Override
public void onClick(View view) {
RadioGroup group = (RadioGroup) view.getParent();
RadioButton radio = (RadioButton) view;
Score selected = getScore((Integer) radio.getTag());
if (selected.getQuestionNumber() == 11 && (radio.getId() == R.id.radioTop || radio.getId() == R.id.radioLow)) {
DialogFragment modal = new MomentOfTruthDialog(selected);
modal.show(activity.getFragmentManager(), "motModal");
}
selected.setTopScoreSelected(false);
selected.setMiddleScoreSelected(false);
selected.setLowScoreSelected(false);
switch (radio.getId()) {
case R.id.radioTop:
radio.setChecked(true);
selected.setTopScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.TOP_SCORE_VALUE));
break;
case R.id.radioMiddle:
radio.setChecked(true);
selected.setMiddleScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.MIDDLE_SCORE_VALUE));
break;
case R.id.radioLow:
radio.setChecked(true);
selected.setLowScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.LOW_SCORE_VALUE));
break;
}
}
};
}
This is my template item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="6dip"
android:background="@drawable/shadow"
android:orientation="vertical">
<TextView
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/back_for_header"
android:gravity="center"
android:padding="6dip"
android:textColor="#fff"
android:textSize="18sp" />
<RadioGroup
android:id="@+id/radioGroupSurvey"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
style="@style/Survey_Label_For_TextView"
android:text="@string/top_label" />
<RadioButton
android:id="@+id/radioTop"
style="@style/Survey_RadioButton"/>
<TextView
style="@style/Survey_Label_For_TextView"
android:text="@string/middle_label" />
<RadioButton
android:id="@+id/radioMiddle"
style="@style/Survey_RadioButton" />
<TextView
style="@style/Survey_Label_For_TextView"
android:text="@string/low_label" />
<RadioButton
android:id="@+id/radioLow"
style="@style/Survey_RadioButton"/>
</RadioGroup>
</LinearLayout>
解决方案
Thanks, i solved my problem.
This is my adapter now:
public class ScoreAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Score> items;
private Resources resources;
public ScoreAdapter(Activity activity, List<Score> items) {
this.activity = activity;
this.items = items;
this.inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
resources = activity.getResources();
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int location) {
return items.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
public List<Score> getItems() {
return items;
}
private static class ViewHolder {
TextView name;
RadioGroup radioGroup;
RadioButton radioTop, radioMiddle, radioLow;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_survey, null, false);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.txtName);
holder.radioGroup = (RadioGroup) convertView.findViewById(R.id.radioGroupSurvey);
holder.radioTop = (RadioButton) convertView.findViewById(R.id.radioTop);
holder.radioMiddle = (RadioButton) convertView.findViewById(R.id.radioMiddle);
holder.radioLow = (RadioButton) convertView.findViewById(R.id.radioLow);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Score item = (Score) getItem(position);
holder.name.setText(item.getQuestionName());
holder.radioGroup.setOnCheckedChangeListener(null);
holder.radioTop.setText(item.getTopDescription());
holder.radioTop.setChecked(item.isTopScoreSelected());
holder.radioMiddle.setText(item.getMiddleDescription());
holder.radioMiddle.setChecked(item.isMiddleScoreSelected());
holder.radioLow.setText(item.getLowDescription());
holder.radioLow.setChecked(item.isLowScoreSelected());
holder.radioGroup.setTag(position);
holder.radioGroup.setOnCheckedChangeListener(listener);
return convertView;
}
RadioGroup.OnCheckedChangeListener listener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int id) {
RadioButton radio = (RadioButton)radioGroup.findViewById(radioGroup.getCheckedRadioButtonId());
Score selected = (Score) getItem((Integer) radioGroup.getTag());
boolean showMOT = false;
selected.setTopScoreSelected(false);
selected.setMiddleScoreSelected(false);
selected.setLowScoreSelected(false);
radio.setChecked(true);
radio.setSelected(true);
switch (id) {
case R.id.radioTop:
showMOT = true;
selected.setTopScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.TOP_SCORE_VALUE));
break;
case R.id.radioMiddle:
selected.setMiddleScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.MIDDLE_SCORE_VALUE));
break;
case R.id.radioLow:
showMOT = true;
selected.setLowScoreSelected(true);
selected.setScoreSelected(resources.getInteger(R.integer.LOW_SCORE_VALUE));
break;
}
if (selected.getQuestionNumber() == 11 && showMOT)
showDialogMOT(selected);
}
};
private void showDialogMOT(Score score) {
DialogFragment modal = new MomentOfTruthDialog(score);
modal.show(activity.getFragmentManager(), "motModal");
}
}
这篇关于装满单选按钮组一个ListView与适配器一个onClick监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文