【发布时间】:2016-12-20 21:18:00
【问题描述】:
这是我在回收站视图中的单选代码。我可以在回收站列表中选择单选,但是当我取消选择单选按钮时,我必须在单选按钮上单击两次才能再次启用,即再次选择单选按钮。任何人都可以帮我解决这个问题....
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class Address_Adapter extends RecyclerView.Adapter<Address_Adapter.AddresssHolder>{
private List<Model_Address> listData;
private LayoutInflater inflater;
private Context context;
private RadioButton rbChecked = null;
private int rbPosoition = 0;
public Address_Adapter(List<Model_Address> listData, Context context) {
this.listData = listData;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public AddresssHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.layout_recycler_address, parent,false);
return new AddresssHolder(view,listData,context); }
@Override
public void onBindViewHolder(final AddresssHolder holder, final int position) {
Model_Address item = listData.get(position);
holder.address.setText(item.getAddress());
holder.state.setText(item.getState());
holder.pin_code.setText(item.getPin_code());
holder.contact.setText(item.getContact());
if (holder.selected.isChecked()){
rbPosoition = holder.getAdapterPosition();
Toast.makeText(context, "" + rbPosoition, Toast.LENGTH_SHORT).show();
}
}
@Override
public int getItemCount() {
return listData.size();
}
public class AddresssHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView address, state, pin_code, contact;
private RadioButton selected;
private View container;
private List<Model_Address> listData;
private Context context;
public AddresssHolder(View itemView,List<Model_Address> listdata,Context context) {
super(itemView);
this.listData = listdata;
this.context = context;
itemView.setOnClickListener(this);
address = (TextView) itemView.findViewById(R.id.text_address);
state = (TextView) itemView.findViewById(R.id.state_text);
pin_code = (TextView) itemView.findViewById(R.id.pin_code_text);
contact = (TextView) itemView.findViewById(R.id.contact_text);
selected = (RadioButton) itemView.findViewById(R.id.select_radioButton);
if (rbPosoition == 0 && selected.isChecked())
{
rbChecked = selected;
rbPosoition = 0;
}
selected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton rb = (RadioButton) v;
int clickedPos = getAdapterPosition();
if (rb.isChecked()){
if(rbChecked != null)
{
rbChecked.setChecked(false);
}
rbChecked = rb;
rbPosoition = clickedPos;
}
else{
rbChecked = null;
rbPosoition = 0;
}
}
});
}
@Override
public void onClick(View v) {
int positenter code hereion = getAdapterPosition();
}
}
}
【问题讨论】:
-
为什么会有全局 RadioButton rbChecked ?
-
获取选中单选按钮的引用..
-
存储选中的单选按钮的位置然后取消选中或选中它会更明智(在回收后在屏幕上创建的检查事件或视图之后)
-
我可以使用 getAdapterPosition() 存储选中的 RadioButton 的位置。但我不知道如何操作,因为当检查新的 RadioButton 时,它会给出当前适配器的位置,我不知道如何在特定的适配器位置操作 RadioButton。你能帮我写代码吗??跨度>
标签: android