首页 > 解决方案 > 使用回收站视图时如何取回选择了哪个单选按钮的数据

问题描述

我没有使用RadioGroup,而是使用 . 将按钮动态添加到屏幕上RecyclerView。我想知道,如何在 MainActivity 中获取被选中的按钮的数据并对其进行操作

回收器视图适配器

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {

    private String[] data;
    private int lastSelectedPosition = -1;

    public RecyclerViewAdapter(String[] data){
        this.data = data;
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
        View view = inflater.inflate(R.layout.list_item_layout,viewGroup,false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
        String title = data[i];
        Log.i("TAG2",Integer.toString(i));
        Log.i("TAG3",title);
        viewHolder.radioButton.setText(title);
        viewHolder.radioButton.setChecked(lastSelectedPosition==i);
    }

    @Override
    public int getItemCount() {
        Log.i("TAG",Integer.toString(data.length));
        return data.length;
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

        RadioButton radioButton;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            radioButton = itemView.findViewById(R.id.radioButton);

            radioButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    lastSelectedPosition = getAdapterPosition();
                    notifyDataSetChanged();
                }
            });

        }
    }

}

MainActivity 类

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RecyclerView recyclerView = findViewById(R.id.my_recycler_view);


        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        String[] lang = {"English","Hindi","French"};
        recyclerView.setAdapter(new RecyclerViewAdapter(lang));

        //Want to get data of the RadioButton Selected


    }


}

单选按钮是语言,在选择特定语言时,我希望整个屏幕以该特定语言显示内容。我想通过知道在 MainAcitivity 类中选择了哪个单选按钮来动态地做到这一点。

标签: android

解决方案


interface在您的适配器中创建并在您的活动onclickradiobutton实现它。

适配器:

public class RvAdapter extends RecyclerView.Adapter<RvAdapter.ViewHolder> {


    private ItemClickListener mClickListener;

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        Button btn_remove;

        ViewHolder(View itemView) {
            super(itemView);

            btn_remove = itemView.findViewById(R.id.btn_remove);
            btn_remove.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
        }
    }

    public void setClickListener(ItemClickListener itemClickListener) {
        this.mClickListener = itemClickListener;
    }

    public interface ItemClickListener {
        void onItemClick(View view, int position);
    }

}

活动:

public class MainActivity extends AppCompactActivity implements RvAdapter.ItemClickListener {
@Override
    public void onCreate(...) {
       RvAdapter.setClickListener(this);
    }

 @Override
    public void onItemClick(View view, int position) {

    }

}

推荐阅读