我有这个回收器视图适配器,视图中的每个项目都有一个radiobutton。我想在我的片段中选择项目。我不知道该怎么做。谁能帮帮我?
这是我的适配器类。
public class croptypeadapter extends RecyclerView.Adapter<croptypeadapter.ViewHolder> {
private List<croptype_list> croptypes;
private Context context;
Integer mSelectedItem = 0;
public croptypeadapter(List<croptype_list> croptypes, Context context) {
this.croptypes = croptypes;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.vertical_menu,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
croptype_list ac=croptypes.get(position);
Picasso.get().load(ac.getCropurl()).fit().into(holder.img);
holder.txtview.setText(ac.getCropname());
holder.radioButton.setChecked(position == mSelectedItem);
}
@Override
public int getItemCount() {
return croptypes.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
private ImageView img;
TextView txtview;
RadioButton radioButton;
public ViewHolder(View itemView) {
super(itemView);
img= itemView.findViewById(R.id.imageview);
txtview = itemView.findViewById(R.id.txtview);
radioButton= itemView.findViewById(R.id.radio);
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectedItem = getAdapterPosition();
String data = croptypes.get(mSelectedItem).getCropname();
notifyItemRangeChanged(0, croptypes.size());
}
};
itemView.setOnClickListener(l);
radioButton.setOnClickListener(l);
}
}
}
这是我的片段,其中有回收视图。我想在Textview裁剪中显示在回收器视图中选择的项目。
public class desc extends Fragment{
private View view;
RecyclerView vertical_recycler_view;
private croptypeadapter croptypeadapter;
private List<croptype_list> cropdata;
ToggleButton toggleButton2;
TextView crop;
public static ApiInterface apiInterface;
public desc() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_zones, container, false);
crop = view.findViewById(R.id.crop);
vertical_recycler_view=view.findViewById(R.id.vertical_recycler_view);
vertical_recycler_view.setLayoutManager(new LinearLayoutManager(getActivity()));
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<List<croptype_list>>call=apiInterface.getcroptypes();
call.enqueue(new Callback<List<croptype_list>>() {
@Override
public void onResponse(Call<List<croptype_list>> call, Response<List<croptype_list>> response) {
cropdata=response.body();
croptypeadapter=new croptypeadapter(cropdata,getActivity());
vertical_recycler_view.setAdapter(croptypeadapter); }
@Override
public void onFailure(Call<List<croptype_list>> call, Throwable t) {
}
});
toggleButton2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
toggleButton2.setBackgroundResource(R.drawable.uparrow);
vertical_recycler_view.setVisibility(View.VISIBLE);
}else{
toggleButton2.setBackgroundResource(R.drawable.downarrow);
vertical_recycler_view.setVisibility(View.GONE);
}
}
});
}
为单选按钮设置一个onCheckedChanged监听器,并使txtView在你的类中成为静态的,这样你就可以在你的适配器类中访问它。
static TextView crop
在你的适配器类中的onBindViewholder
holder.radiobutton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked)
this.mSelectedItem = position;
desc.crop.setText("yourtext");
}
});
onCheckedChanged监听器将更新mSelectedItem的值,这样即使Viewholder被回收,该值也会保持只对所选项目进行选择。