列表视图无线电组错误 [英] listview with radio group error
问题描述
大家我创建一个自定义列表视图动态单选按钮添加到RadioGroup中高达,我得到我想要什么,但是当我尝试选择在第一排一个单选按钮,然后在第5,第9个自动第一个按钮,13行是越来越选择当我选择第二行中的任何按钮,然后在第6相同的按钮,第8,第12行是越来越选择什么,我做错了,我的适配器类
公共类InteractiveArrayAdapter扩展ArrayAdapter<型号:GT; {
字符串变量=活动;
私人最终名单,其中,型号>清单;
私人最终活动范围内;
公共InteractiveArrayAdapter(活动背景下,列表与LT;型号>列表){
超(背景下,R.layout.rowbuttonlayout,清单);
this.context =背景;
this.list =清单;
}
静态类ViewHolder {
受保护的TextView文本;
保护复选框复选框,checkbox1;
保护RadioGroup中mgroup首项;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
Log.d(标签,3);
查看查看= NULL;
如果(convertView == NULL){
LayoutInflater充气= context.getLayoutInflater();
鉴于= inflator.inflate(R.layout.rowbuttonlayout,NULL);
最后ViewHolder viewHolder =新ViewHolder();
viewHolder.text =(TextView中)view.findViewById(R.id.label);
//viewHolder.checkbox =(复选框)view.findViewById(R.id.check);
//viewHolder.checkbox1 =(复选框)view.findViewById(R.id.checkbox1);
viewHolder.mgroup =(RadioGroup中)view.findViewById(R.id.radioGroup1);
最终单选[] mbutton =新单选[5];
为(中间体升= 0;升小于5;升++){
mbutton [1] =新的单选按钮(上下文);
mbutton [升] .setText(测试+ 1);
viewHolder.mgroup.addView(mbutton [升]);
}
viewHolder.mgroup.setOnCheckedChangeListener(新RadioGroup.OnCheckedChangeListener(){
公共无效onCheckedChanged(RadioGroup中mRadioGroup,INT checkedId){
的for(int i = 0; I< mRadioGroup.getChildCount();我++){
单选按钮BTN =(单选)mRadioGroup.getChildAt(我);
// INT T = table.indexOfChild(table_row);
//System.out.println(t);
INT T = mRadioGroup.getId();
的System.out.println(T);
如果(btn.getId()== checkedId){
字符串文本= btn.getText()的toString()。
//做一些文字
Log.d(文字,EVENT1);
返回;
}
}
}
});
view.setTag(viewHolder);
Log.d(标签,我);
} 其他 {
鉴于= convertView;
Log.d(标签,meeee);
}
ViewHolder支架=(ViewHolder)view.getTag();
holder.text.setText(list.get(位置).getName());
Log.d(标签,event7);
返回查看;
}
}
我张贴我的工作code所以,这将是有益的给别人看看它
公共类InteractiveArrayAdapter扩展ArrayAdapter<型号:GT;实现OnClickListener {
字符串变量=活动;
私人最终名单,其中,型号>清单;
私人最终活动范围内;
INT李,JH;
公共InteractiveArrayAdapter(活动背景下,列表与LT;型号>列表){
超(背景下,R.layout.rowbuttonlayout,清单);
this.context =背景;
this.list =清单;
}
静态类ViewHolder {
受保护的TextView文本;
保护复选框复选框,checkbox1;
保护RadioGroup中mgroup首项;
保护单选mbutton;
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
//Log.d(tag,3);
查看查看= NULL;
如果(convertView == NULL){
//System.out.println("ok);
LayoutInflater充气= context.getLayoutInflater();
鉴于= inflator.inflate(R.layout.rowbuttonlayout,NULL);
最后ViewHolder viewHolder =新ViewHolder();
viewHolder.text =(TextView中)view.findViewById(R.id.label);
viewHolder.mgroup =(RadioGroup中)view.findViewById(R.id.radioGroup1);
最终单选[] mbutton =新单选[5];
为(中间体升= 0;升小于5;升++){
mbutton [1] =新的单选按钮(上下文);
mbutton [L] .setText(测试+ 1 +位置);
mbutton [升] .setId(L + 1);
mbutton [升] .setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
单选BYT =(单选)V;
byt.isChecked();
byt.getId();
模型元素=(模型)viewHolder.mgroup.getTag();
element.setBte(byt.getId());
element.gte((字符串)viewHolder.text.getText());
的System.out.println(givemeresult);
}
});
viewHolder.mgroup.addView(mbutton [升]);
}
view.setTag(viewHolder);
viewHolder.mgroup.setTag(list.get(位置));
} 其他 {
鉴于= convertView;
((ViewHolder)view.getTag())mgroup.setTag(list.get(位置))。
}
ViewHolder支架=(ViewHolder)view.getTag();
。view.getTag())mgroup.getTag();
holder.text.setText(list.get(位置).getName());
如果(list.get(位置).getName()== list.get(位置).done()){
holder.mgroup.check(list.get(位置).isSelected());
}
其他 {
holder.mgroup.clearCheck();
}
返回查看;
}
这是因为观点被重用。你必须设置holder.mgroup中的其他人,如果(convertView == NULL)
ç有点被我改变了你的$ C $:
公共类InteractiveArrayAdapter扩展ArrayAdapter<型号:GT; {
字符串变量=活动;
私人最终名单,其中,型号>清单;
私人最终活动范围内;
公共InteractiveArrayAdapter(活动背景下,列表与LT;型号>列表){
超(背景下,R.layout.rowbuttonlayout,清单);
this.context = context.getApplicationContext();
this.list =清单;
}
静态类ViewHolder {
受保护的TextView文本;
保护复选框复选框,checkbox1;
保护RadioGroup中mgroup首项;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
Log.d(标签,3);
查看查看= convertView;
ViewHolder viewHolder = NULL;
最后的单选按钮[] mbutton = NULL;
如果(查看== NULL){
LayoutInflater充气= context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
鉴于= inflator.inflate(R.layout.rowbuttonlayout,NULL);
viewHolder =新ViewHolder();
viewHolder.text =(TextView中)view.findViewById(R.id.label);
//viewHolder.checkbox =(复选框)view.findViewById(R.id.check);
//viewHolder.checkbox1 =(复选框)view.findViewById(R.id.checkbox1);
viewHolder.mgroup =(RadioGroup中)view.findViewById(R.id.radioGroup1);
//我不知道这..
// 开始
mbutton =新单选[5];
为(中间体升= 0;升小于5;升++){
mbutton [1] =新的单选按钮(上下文);
mbutton [升] .setText(测试+ 1);
viewHolder.mgroup.addView(mbutton [升]);
}
viewHolder.mgroup.setOnCheckedChangeListener(新RadioGroup.OnCheckedChangeListener(){
公共无效onCheckedChanged(RadioGroup中mRadioGroup,INT checkedId){
的for(int i = 0; I< mRadioGroup.getChildCount();我++){
单选按钮BTN =(单选)mRadioGroup.getChildAt(我);
// INT T = table.indexOfChild(table_row);
//System.out.println(t);
INT T = mRadioGroup.getId();
的System.out.println(T);
如果(btn.getId()== checkedId){
字符串文本= btn.getText()的toString()。
//做一些文字
Log.d(文字,EVENT1);
返回;
}
}
}
});
// 结束
view.setTag(viewHolder);
Log.d(标签,我);
} 其他 {
viewHolder =(ViewHolder)convertView.getTag();
// 开始
mbutton = viewHolder.mgroup;
// 结束
Log.d(标签,meeee);
}
ViewHolder支架=(ViewHolder)view.getTag();
holder.text.setText(list.get(位置).getName());
Log.d(标签,event7);
返回查看;
}
}
我实现了ImageView的的(剥离):
公共类DealAdapter扩展ArrayAdapter< DealObject> {
私人语境mContext;
私人活动mActivity;
私人的ArrayList< DealObject> mItems;
私人诠释mXmlId;
公共DealAdapter(上下文的背景下,INT textViewResourceId,ArrayList的< DealObject>的项目,活动活动){
超(背景下,textViewResourceId,项目);
this.mContext = context.getApplicationContext();
this.mActivity =活动;
this.mItems =项目;
this.mXmlId = textViewResourceId;
}
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
//视图V = NULL;
视图V = convertView;
ViewHolder支架=无效;
RemoteImageLoader ImageLoader的=新RemoteImageLoader(mContext,真正的);
RemoteImageView dealImage = NULL;
DealObject月= mItems.get(位置);
尝试 {
如果(V == NULL){
LayoutInflater VI =(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
V = vi.inflate(mXmlId,NULL);
持有人=新ViewHolder();
dealImage =(RemoteImageView)v.findViewById(R.id.deal_image);
holder.dealImage = dealImage;
v.setTag(保持器);
} 其他 {
//获取ViewHolder回得到快速访问ImageView的。
支架=(ViewHolder)convertView.getTag();
holder.dealImage.setBackgroundColor(Color.WHITE);
dealImage = holder.dealImage;
}
如果(mo.getImage()!= NULL){
//调用reset是显示在一个循环视图重要的是prevent旧图像。
dealImage.reset();
holder.dealImage.setImageUrl(IMAGEURL);
尝试 {
holder.dealImage.loadImage();
}
赶上(例外前){
}
}
}
赶上(例外前){
ex.printStackTrace();
}
返回伏;
}
私有静态final类ViewHolder {
私人RemoteImageView dealImage;
}
}
everybody i am creating a custom listview with dynamic radiobuttons adding to radiogroup upto that i am getting what i want but when i try to select one radio button in first row then automatically first button in 5th ,9th,13 row is getting selected and when i select any button in second row then same button in 6th,8th,12th row is getting selected what i am doing wrong here and my adapter class
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
String tag = "Events";
private final List<Model> list;
private final Activity context;
public InteractiveArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox,checkbox1;
protected RadioGroup mgroup;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(tag," 3");
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
//viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
//viewHolder.checkbox1 = (CheckBox) view.findViewById(R.id.checkbox1);
viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1);
final RadioButton[] mbutton=new RadioButton[5];
for(int l=0;l<5;l++){
mbutton[l]=new RadioButton(context);
mbutton[l].setText("test"+l);
viewHolder.mgroup.addView(mbutton[l]);
}
viewHolder.mgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) {
for(int i=0; i<mRadioGroup.getChildCount(); i++) {
RadioButton btn = (RadioButton) mRadioGroup.getChildAt(i);
//int t=table.indexOfChild(table_row);
//System.out.println(t);
int t=mRadioGroup.getId();
System.out.println(t);
if(btn.getId() == checkedId) {
String text = btn.getText().toString();
// do something with text
Log.d(text," event1");
return;
}
}
}
});
view.setTag(viewHolder);
Log.d(tag,"me");
} else {
view = convertView;
Log.d(tag,"meeee");
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
Log.d(tag," event7");
return view;
}
}
i am posting my working code so that it will be helpfull to others have a look at it
public class InteractiveArrayAdapter extends ArrayAdapter<Model> implements OnClickListener {
String tag = "Events";
private final List<Model> list;
private final Activity context;
int li,jh;
public InteractiveArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox,checkbox1;
protected RadioGroup mgroup;
protected RadioButton mbutton;
}
@Override
public View getView( final int position, View convertView, ViewGroup parent) {
//Log.d(tag," 3");
View view =null;
if (convertView == null) {
//System.out.println("ok");
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1);
final RadioButton[] mbutton=new RadioButton[5];
for(int l=0;l<5;l++){
mbutton[l]=new RadioButton(context);
mbutton[l].setText("test"+l+position);
mbutton[l].setId(l+1);
mbutton[l].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
RadioButton byt=(RadioButton) v;
byt.isChecked();
byt.getId();
Model element = (Model) viewHolder.mgroup.getTag();
element.setBte(byt.getId());
element.gte((String) viewHolder.text.getText());
System.out.println("givemeresult");
}
});
viewHolder.mgroup.addView(mbutton[l]);
}
view.setTag(viewHolder);
viewHolder.mgroup.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).mgroup.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
view.getTag()).mgroup.getTag();
holder.text.setText(list.get(position).getName());
if (list.get(position).getName()==list.get(position).done()){
holder.mgroup.check(list.get(position).isSelected());
}
else {
holder.mgroup.clearCheck();
}
return view;
}
That's because views are reused. You have to set holder.mgroup in the else of if(convertView == null)
Your code a bit changed by me:
public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
String tag = "Events";
private final List<Model> list;
private final Activity context;
public InteractiveArrayAdapter(Activity context, List<Model> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context.getApplicationContext();
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected CheckBox checkbox,checkbox1;
protected RadioGroup mgroup;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(tag," 3");
View view = convertView;
ViewHolder viewHolder = null;
final RadioButton[] mbutton = null;
if (view == null) {
LayoutInflater inflator = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflator.inflate(R.layout.rowbuttonlayout, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
//viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
//viewHolder.checkbox1 = (CheckBox) view.findViewById(R.id.checkbox1);
viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1);
// I'm not sure about this..
// Begin
mbutton=new RadioButton[5];
for(int l=0;l<5;l++){
mbutton[l]=new RadioButton(context);
mbutton[l].setText("test"+l);
viewHolder.mgroup.addView(mbutton[l]);
}
viewHolder.mgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) {
for(int i=0; i<mRadioGroup.getChildCount(); i++) {
RadioButton btn = (RadioButton) mRadioGroup.getChildAt(i);
//int t=table.indexOfChild(table_row);
//System.out.println(t);
int t=mRadioGroup.getId();
System.out.println(t);
if(btn.getId() == checkedId) {
String text = btn.getText().toString();
// do something with text
Log.d(text," event1");
return;
}
}
}
});
// End
view.setTag(viewHolder);
Log.d(tag,"me");
} else {
viewHolder = (ViewHolder) convertView.getTag();
// Begin
mbutton = viewHolder.mgroup;
// End
Log.d(tag,"meeee");
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
Log.d(tag," event7");
return view;
}
}
My implementation of an imageView (stripped):
public class DealAdapter extends ArrayAdapter<DealObject> {
private Context mContext;
private Activity mActivity;
private ArrayList<DealObject> mItems;
private int mXmlId;
public DealAdapter(Context context, int textViewResourceId, ArrayList<DealObject> items, Activity activity) {
super(context, textViewResourceId, items);
this.mContext = context.getApplicationContext();
this.mActivity = activity;
this.mItems = items;
this.mXmlId = textViewResourceId;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//View v = null;
View v = convertView;
ViewHolder holder = null;
RemoteImageLoader imageLoader = new RemoteImageLoader(mContext, true);
RemoteImageView dealImage = null;
DealObject mo = mItems.get(position);
try {
if (v == null) {
LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(mXmlId, null);
holder = new ViewHolder();
dealImage = (RemoteImageView) v.findViewById(R.id.deal_image);
holder.dealImage = dealImage;
v.setTag(holder);
} else {
// Get the ViewHolder back to get fast access to the ImageView.
holder = (ViewHolder) convertView.getTag();
holder.dealImage.setBackgroundColor(Color.WHITE);
dealImage = holder.dealImage;
}
if(mo.getImage() != null){
// calling reset is important to prevent old images from displaying in a recycled view.
dealImage.reset();
holder.dealImage.setImageUrl(imageUrl);
try {
holder.dealImage.loadImage();
}
catch (Exception ex) {
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
return v;
}
private static final class ViewHolder {
private RemoteImageView dealImage;
}
}
这篇关于列表视图无线电组错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!