我一遍又一遍地搜索这个问题,我在stackoverflow中发现了很多问题,但我没有提出解决方案。这是我的问题。 我在这样的linearlayout中有一个项目列表:
当屏幕出现时,会自动选择最后一个辐射按钮。但如果我选择另一个单选按钮,则最后一个单选按钮已处于选中状态。我想只选择一个radion按钮,但同时当屏幕出现时,最后一个单选按钮将被自动选中,而其他按钮将自动不被选中。 我怎样才能做到这一点。 我的适配器类是:
public class AdapterPaymentMethod extends ArrayAdapter<PaymentData> {
private Context context;
private boolean userSelected = false;
ViewHolder holder;
public AdapterPaymentMethod(Context context, int resource,
List<PaymentData> items) {
super(context, resource, items);
this.context = context;
}
/* private view holder class */
private class ViewHolder {
RadioButton radioBtn;
Button btPaymentMethod;
// ImageView ivLine;
}
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
PaymentData rowItem = getItem(position);
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(
com.android.paypal.homeactivity.R.layout.list_item, null);
holder = new ViewHolder();
holder.radioBtn = (RadioButton) convertView
.findViewById(com.android.paypal.homeactivity.R.id.rdb_payment_method);
holder.btPaymentMethod = (Button) convertView
.findViewById(com.android.paypal.homeactivity.R.id.bt_item_event);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
if(position==getCount()-1 && userSelected==false){
holder.radioBtn.setChecked(true);
Log.d("if position", ""+position);
}
else{
holder.radioBtn.setChecked(false);
Log.d("else position", ""+position);
}
holder.radioBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
userSelected=true;
if(getCount()-1==position&&userSelected==true){
}
else if(getCount()-2==position&&userSelected==true)
{
holder.radioBtn.setChecked(true);
}
}
});
holder.radioBtn.setText(rowItem.getRdbText());
holder.btPaymentMethod.setText(rowItem.getBtText());
return convertView;
}
}
答案 0 :(得分:13)
将当前已检查的RadioButton
保留在Activity
的变量中。在OnClickListener
的{{1}}执行此操作:
RadioButtons
答案 1 :(得分:7)
这是我的代码:
<强> ListAdapter.java 强>
public class ListAdapter extends BaseAdapter {
private Context context;
private String[] version;
private LayoutInflater inflater;
private RadioButton selected = null;
public ListAdapter(Context context, String[] version) {
this.context = context;
this.version = version;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return version.length;
}
@Override
public Object getItem(int position) {
return version;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup) {
final Holder holder;
if (view == null) {
holder = new Holder();
view = inflater.inflate(R.layout.row_list, null);
holder.radioButton = (RadioButton) view.findViewById(R.id.radio1);
holder.textViewVersion = (TextView) view.findViewById(R.id.textView1);
holder.btnMore = (Button) view.findViewById(R.id.button1);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.textViewVersion.setText(version[position]);
//by default last radio button selected
if (position == getCount() - 1) {
if (selected == null) {
holder.radioButton.setChecked(true);
selected = holder.radioButton;
}
}
holder.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (selected != null) {
selected.setChecked(false);
}
holder.radioButton.setChecked(true);
selected = holder.radioButton;
}
});
}
private class Holder {
private RadioButton radioButton;
private TextView textViewVersion;
private Button btnMore;
}
}
希望这可以帮助你:)
答案 2 :(得分:0)
试试这个黑客。
在布局中进行此更改。
<RadioButton
android:id="@+id/radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
**android:clickable="false"
android:focusable="false"**
/>
在您的适配器中,只需添加以下行:
private int selectedPosition = -1;
viewHolder.choiceButton = (RadioButton)convertView.findViewById(R.id.radio);
if(selectedPosition == -1) {
viewHolder.choiceButton.setChecked(position==getCount()-1);
}
else{
viewHolder.choiceButton.setChecked(selectedPosition == position);
}
在getView()中分配selectedPosition:
viewHolder.clickLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectedPosition = (int) view.getTag();
notifyDataSetChanged();
}
});
答案 3 :(得分:0)
在您的Adapter类中,获取一个全局变量并如下所示对其进行初始化。
private int lastSelectedPosition = -1;
public class ViewHolder extends RecyclerView.ViewHolder {
public RadioButton check;
public ViewHolder(View itemView) {
super(itemView);
check=itemView.findViewById(R.id.check_box4);//Your radio button id
check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lastSelectedPosition = getAdapterPosition();
notifyDataSetChanged();
}
});
}
public void onBindViewHolder(ViewHolder holder, int position) {
holder.check.setChecked(lastSelectedPosition == position);
}