簡體   English   中英

使用回收站視圖時,如何取回選擇了單選按鈕的數據

[英]How to get back the data of which radio button was selected, when using recycler view

我沒有使用RadioGroup ,我使用RecyclerView動態地將按鈕添加到屏幕上。 我想知道,如何獲取所選按鈕的數據並在MainActivity中對其進行操作

RecyclerViewAdapter

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類中選擇了哪個單選按鈕來動態完成。

在適配器中創建interface並設置onclick of radiobutton並在您的活動中實現它。

Adapater:

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) {

    }

}

上面提到的解決方案也是正確的,反之亦然 - 您可以在適配器中添加getter以獲取lastSelectedPosition,並且在您的活動中,您已經使用adapter.getLastSelectedPosition()為您提供了適配器實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM