使用Listview Android在同一行和同一列中仅选择一个复选框/单选按钮,在同一行中选择两个复选框/单选按钮
我在Adapter class 2复选框中使用了自定义Listview using Adapter class(使用适配器类),为此,我只需选中一个复选框,复选框1行/列与复选框2相同。 例如,我在一个Listview中有5行,共10个复选框,在Listview中10个,一次只选择一个,其他所有的都应该取消选择 我试了很多,但只选择了复选框1列 请帮忙使用Listview Android在同一行和同一列中仅选择一个复选框/单选按钮,在同一行中选择两个复选框/单选按钮,android,android-layout,listview,android-fragments,android-intent,Android,Android Layout,Listview,Android Fragments,Android Intent,我在Adapter class 2复选框中使用了自定义Listview using Adapter class(使用适配器类),为此,我只需选中一个复选框,复选框1行/列与复选框2相同。 例如,我在一个Listview中有5行,共10个复选框,在Listview中10个,一次只选择一个,其他所有的都应该取消选择 我试了很多,但只选择了复选框1列 请帮忙 public class ListViewAdapter extends ArrayAdapter<Friend> { p
public class ListViewAdapter extends ArrayAdapter<Friend> {
private List<Friend> myFriends;
private Activity activity;
private int selectedPosition = -1;
String flag="";
String[]ids=new String[100];
String[]ids1=new String[100];
public ListViewAdapter(Activity context, int resource, List<Friend> objects) {
super(context, resource, objects);
this.activity = context;
this.myFriends = objects;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
// If holder not exist then locate all view from UI file.
if (convertView == null) {
// inflate UI from XML file
convertView = inflater.inflate(R.layout.item_listview, parent, false);
// get all UI view
holder = new ViewHolder(convertView);
// set tag for holder
convertView.setTag(holder);
} else {
// if holder created, get tag from view
holder = (ViewHolder) convertView.getTag();
}
holder.checkBox.setTag(position); // This line is important.
holder.checkBox1.setTag(position + 100);
holder.friendName.setText(getItem(position).getName());
holder.rdgrp.setTag(position);
ids[position]=holder.checkBox.getTag().toString();
ids1[position]=holder.rdgrp.getTag().toString();
// System.out.println("praveen"+ids[position]);
if (position == selectedPosition) {
holder.rdgrp.setActivated(true);
} else holder.rdgrp.setActivated(false);
if( holder.checkBox.getTag().equles(position)){
holder.checkBox.setOnClickListener(onStateChangedListener(holder.checkBox, position));
}else{
holder.checkBox1.setOnClickListener(onStateChangedListener(holder.checkBox1, position));
}
return convertView;
}
public View.OnClickListener onStateChangedListener(final RadioGroup gry, final int position ){
return new View.OnClickListener() {
@Override
public void onClick(View v) {
if (gry.isClickable()) {
selectedPosition = position;
} else {
selectedPosition = -1;
}
notifyDataSetChanged();
}
};
}
private static class ViewHolder {
private TextView friendName;
private CheckBox checkBox,checkBox1;
public ViewHolder(View v) {
checkBox = (CheckBox) v.findViewById(R.id.check);
checkBox1 = (CheckBox) v.findViewById(R.id.check1);
friendName = (TextView) v.findViewById(R.id.name);
}
}
}
公共类ListViewAdapter扩展了ArrayAdapter{
私人名单我的朋友;
私人活动;
private int selectedPosition=-1;
字符串标志=”;
字符串[]ID=新字符串[100];
字符串[]ids1=新字符串[100];
公共ListViewAdapter(活动上下文、int资源、列表对象){
超级(上下文、资源、对象);
这个活动=上下文;
this.myFriends=对象;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终持票人;
LayoutFlater充气器=(LayoutFlater)activity.getSystemService(activity.LAYOUT\u充气器\u服务);
//如果持有者不存在,则从UI文件中查找所有视图。
if(convertView==null){
//从XML文件膨胀UI
convertView=充气机。充气(R.layout.item_listview,父项,false);
//获取所有UI视图
支架=新的视图支架(convertView);
//为支架设置标签
convertView.setTag(支架);
}否则{
//如果创建了保持架,则从视图中获取标记
holder=(ViewHolder)convertView.getTag();
}
holder.checkBox.setTag(位置);//这一行很重要。
支架.复选框1.设置标签(位置+100);
holder.friendName.setText(getItem(position.getName());
支架rdgrp设置标签(位置);
ids[position]=holder.checkBox.getTag().toString();
ids1[position]=holder.rdgrp.getTag().toString();
//System.out.println(“praveen”+ids[position]);
如果(位置==selectedPosition){
保持架.rdgrp.setActivated(真);
}else holder.rdgrp.setActivated(false);
if(holder.checkBox.getTag().equals(位置)){
holder.checkBox.setOnClickListener(onStateChangedListener(holder.checkBox,position));
}否则{
holder.checkBox1.setOnClickListener(onStateChangedListener(holder.checkBox1,位置));
}
返回视图;
}
public View.OnClickListener onStateChangedListener(最终射线组gry,最终整型位置){
返回新视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
if(gry.isClickable()){
selectedPosition=位置;
}否则{
selectedPosition=-1;
}
notifyDataSetChanged();
}
};
}
私有静态类视图持有者{
私有文本视图名称;
私有复选框,复选框1;
公共视图持有者(视图v){
复选框=(复选框)v.findviewbyd(R.id.check);
checkBox1=(复选框)v.findviewbyd(R.id.check1);
friendName=(TextView)v.findViewById(R.id.name);
}
}
}
您可以使用“组”作为具有两个复选框的单行列表视图的复选框,然后应用以下代码行
"listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)"
您可以使用具有两个复选框的列表视图单行的“组”复选框,然后应用以下代码行
"listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE)"
请尝试使用以下代码:
public class CustomAdapter extends BaseAdapter{
int selectedPosition = -1; // row position
int selectedCheckbox = -1; // 1 for 1st, 2 for 2nd on each row
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(position == selectedPosition){
if(selectedCheckbox == 1){
checkbox1.setChecked(true);
checkbox2.setChecked(false);
} else if(selectedCheckbox == 2){
chkbox1.setChecked(false);
chkbox2.setChecked(true);
}
} else{
checkbox1.setChecked(false);
checkbox2.setChecked(false);
}
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
selectedPosition = position;
selectedCheckbox = 1;
} else{
selectedPosition = -1;
selectedCheckbox = -1;
}
notifyDataSetChanged();
}
});
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
selectedPosition = position;
selectedCheckbox = 2;
} else{
selectedPosition = -1;
selectedCheckbox = -1;
}
notifyDataSetChanged();
}
});
return convertView;
}
}
希望对你有帮助 尝试以下代码:
public class CustomAdapter extends BaseAdapter{
int selectedPosition = -1; // row position
int selectedCheckbox = -1; // 1 for 1st, 2 for 2nd on each row
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(position == selectedPosition){
if(selectedCheckbox == 1){
checkbox1.setChecked(true);
checkbox2.setChecked(false);
} else if(selectedCheckbox == 2){
chkbox1.setChecked(false);
chkbox2.setChecked(true);
}
} else{
checkbox1.setChecked(false);
checkbox2.setChecked(false);
}
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
selectedPosition = position;
selectedCheckbox = 1;
} else{
selectedPosition = -1;
selectedCheckbox = -1;
}
notifyDataSetChanged();
}
});
checkbox2.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
selectedPosition = position;
selectedCheckbox = 2;
} else{
selectedPosition = -1;
selectedCheckbox = -1;
}
notifyDataSetChanged();
}
});
return convertView;
}
}
希望对你有帮助 你尝试了什么?你能发布你的代码吗?是的,我刚刚在问题下方发布了我的代码。你能帮我发布你的代码吗?你能发布你的代码吗?是的,我刚刚在问题下方发布了我的代码。你能帮我发布任何代码吗?我对复选框1和复选框2的这种方法有疑问。它只处理复选框1 public View.OnClickListener onStateChangedListener(最终复选框ry,最终int位置){返回新视图。OnClickListener(){@Override public void onClick(视图v){if(gry.isClickable()){selectedPosition=position;}else{selectedPosition=-1;}notifyDataSetChanged();}};我怀疑如何为复选框1和复选框2调用此方法。它只对复选框1公共视图起作用。OnClickListener onStateChangedListener(最终复选框ry,最终int位置){return new View.OnClickListener(){@Override public void onClick(View v){if(gry.isClickable()){selectedPosition=position;}否则{selectedPosition=-1;}notifydatasetchange();};