第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

RecyclerView 單選按鈕不會只注冊最新檢查的項目(也記得以前的)

RecyclerView 單選按鈕不會只注冊最新檢查的項目(也記得以前的)

胡子哥哥 2023-04-26 14:03:13
我有 RecyclerView,它有多個項目,這些項目包含單選按鈕、課程名稱 (TextView) 和孔號 (TextView)。應該發(fā)生的是,當我單擊單選按鈕時,它應該只選擇那個 1,如果有之前的檢查,它應該取消選中它(單選)。好吧,目前它一次只檢查 1 個,這是可以的(因此前端可以正常工作),但是“在引擎蓋下”發(fā)生了什么......例如:RecyclerView 目前有 3 個項目。我單擊要檢查的第三個項目,然后單擊第一個,然后再次單擊第三個?,F(xiàn)在我點擊“開始游戲”按鈕,應該發(fā)生的是它應該采用最后選中的項目(在本例中是最后選擇的第三個)并將其課程名稱和洞號用于下一個活動,但現(xiàn)在發(fā)生的是它意圖第一個項目課程名稱和洞號......另外,如果我和以前一樣,但我沒有點擊第一個項目,而是點擊第二個項目,然后即使最后我點擊了第三個項目,而不是意圖它的課程名稱和孔號,它意味著第二個項目......所以它總是意圖被點擊的項目(在某個時候)并且從那些被點擊的項目中它檢查第一個(從列表的頂部到底部)并接受它的意圖。這是我的適配器,我在其中檢查選擇了哪一個:public class NewGameCourseAdapter extends RecyclerView.Adapter<NewGameCourseAdapter.NewGameCourseViewHolder> {    private ArrayList<NewGameCourseItem> mCourseList;    private NewGamePlayerAdapter.OnItemsCheckStateListener checkStateListener;private NewGameCourseAdapter.OnItemClickListener itemClickListener;public void setOnItemClickListener(NewGameCourseAdapter.OnItemClickListener listener) {    itemClickListener = listener;}public interface OnItemClickListener {    void onItemClick(int position);}public void setOnItemsCheckStateListener(NewGamePlayerAdapter.OnItemsCheckStateListener checkStateListener) {    this.checkStateListener = checkStateListener;}public static class NewGameCourseViewHolder extends RecyclerView.ViewHolder {        public RadioButton mRadioButton;        public NewGameCourseViewHolder(@NonNull View itemView, final NewGameCourseAdapter.OnItemClickListener listener) {            super(itemView);            mRadioButton = itemView.findViewById(R.id.radioButton);        }    }onBindViewHolder:@Override    public void onBindViewHolder(@NonNull final NewGameCourseViewHolder holder, final int position) {        final NewGameCourseItem currentItem = mCourseList.get(position);        /** This can prevent some unwanted actions in some cases **/        holder.mRadioButton.setOnCheckedChangeListener(null);        holder.mRadioButton.setChecked(selectedPosition == position);摘要:在前端它看起來是正確的,它只選擇最后單擊的那個單選按鈕并取消選中前一個(它應該),但在內(nèi)部,它不會像它應該做的那樣“忘記”以前的選擇......
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經(jīng)驗 獲得超0個贊

你正在做一些奇怪的事情,如果可能的話讓它變得簡單。


第 1 步:在您的適配器類中創(chuàng)建一個方法來獲取所選項目


public NewGameCourseItem getSelectedItem() {

   return mCourseList.get(selectedPosition);

}

第 2 步:然后修改您的點擊方法,如下所示


mStartGame.setOnClickListener(new View.OnClickListener() {

      @Override

      public void onClick(View view) {

         NewGameCourseItem  item = adapter.getSelecteditem();

         Intent intent = new Intent(ActivityNewGame2.this, ActivityGame.class);

         /** Also intent selected items: course name and hole number **/

         intent.putExtra("COURSENAME", item.getCourseName());

         intent.putExtra("HOLESNM", item.getHolesNm());

         startActivity(intent);

         overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

      }

 });

第 3 步:現(xiàn)在修改您的 onCheckedChanged 如下


 public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

     notifyItemChanged(selectedPosition);

     selectedPosition = holder.getAdapterPosition();

     notifyItemChanged(selectedPosition);

 }


查看完整回答
反對 回復 2023-04-26
?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

在適配器中創(chuàng)建一個類變量


private int selectedPosition = -1; //change -1 to any default position, need to be selected.

修改適配器中的以下功能


@Override

public void onBindViewHolder(@NonNull final NewGameCourseViewHolder holder, final int position) {

    final NewGameCourseItem currentItem = mCourseList.get(position);


    holder.mRadioButton.setChecked(selectedPosition == position);


    holder.mRadioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override

        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {

            if(isChecked) {

                int tempSelected = selectedPosition;

                selectedPosition = position;

                notifyDataSetChanged();

            }

        }

    });

}

在適配器中創(chuàng)建一個新方法,如下所示 -


public int getSelectedItemIndex() {

    return selectedPosition;

}

我假設是Activity 類中adapter的變量。NewGameCourseAdapter修改Activity中的按鈕點擊:


mStartGame.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

        int selectedRecyclerItemPosition = adapter.getSelectedItemIndex();


        //Calling intent and pass selected item info

        Intent intent = new Intent(ActivityNewGame2.this, ActivityGame.class);

        /** Also intent selected items course name and hole number **/

        intent.putExtra("COURSENAME", mCourseList.get(selectedRecyclerItemPosition).getCourseName());

        intent.putExtra("HOLESNM", mCourseList.get(selectedRecyclerItemPosition).getHolesNm());

        startActivity(intent);

        overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);

    }

});


查看完整回答
反對 回復 2023-04-26
  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號