viewpager2 генерирует элемент фрагмента Dynami c с recyclerview.adapter, и есть радио-кнопка с группой радио. Есть ошибка - PullRequest
0 голосов
/ 27 апреля 2020

Помогите мне исправить эту ошибку ... У меня есть viewpager2 и я использую RecyclerView.Adapter для создания элемента фрагмента динамического c в viewpager2. Внутри фрагмента есть радиогруппа и 4 радиокнопки. Но когда я проверяю вопрос № 9 и перехожу к вопросу № 4, возникает ошибка, переключатель автоматически проверяется. Как исправить эту ошибку? я покажу ошибку с видео https://www.youtube.com/watch?v=v-s-kCrcOfA&feature=youtu.be

И это ссылка моего кода https://github.com/lordrians/TransGeo

Это действие для вопрос

public class SoalActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnNext, btnPrev, btnAkhiriUjian;
private Dialog popDialogVerif;
private ViewPager2 vpSoal;
private View popupView;

private int jmlSoal;
private SharedPreferences sharedPreferences;
private Toolbar toolbar;
private String pilihanSoal;
private ViewPagerSoalAdapter SoalAdapter;
private TabLayout tabLayout ;
private ArrayList<String> soalKosong = new ArrayList<>();

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

    btnNext = findViewById(R.id.btn_next_soal);
    btnPrev = findViewById(R.id.btn_prev_soal);
    btnAkhiriUjian = findViewById(R.id.btn_akhiri_ujian);

    popDialogVerif = new Dialog(this);

    vpSoal = findViewById(R.id.vp_soal);

    tabLayout = findViewById(R.id.tl_soal);

    toolbar = findViewById(R.id.tb_soal);
    setSupportActionBar(toolbar);
    toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black);
    sharedPreferences = getSharedPreferences(GlobalVar.MYFILE_SP_SOAL,0);

    btnPrev.setOnClickListener(this);
    btnNext.setOnClickListener(this);
    btnAkhiriUjian.setOnClickListener(this);

    pilPaketSoal();
    connTabLayoutAndVp();


    toolbar.setNavigationOnClickListener(view -> {

        finish();

    });

}

private void connTabLayoutAndVp() {
    TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout, vpSoal, new TabLayoutMediator.TabConfigurationStrategy() {
        @Override
        public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
            tab.setText(String.valueOf(position+1));
        }
    });
    tabLayoutMediator.attach();
}

private void pilPaketSoal() {
    pilihanSoal = getIntent().getStringExtra(GlobalVar.PILIHAN_SOAL);
    if (pilihanSoal.equals(GlobalVar.SOAL_UJIAN)){
        SoalAdapter = new ViewPagerSoalAdapter(this, DtSoalUjian.getSoalUjian());
        jmlSoal = DtSoalUjian.getSoalUjian().size();
        storeSharedPreference();
        vpSoal.setAdapter(SoalAdapter);
    }
}

private void storeSharedPreference() {
    SharedPreferences.Editor editor = sharedPreferences.edit();
    for (int i = 0; i < jmlSoal; i++){
        editor.putInt(GlobalVar.SOAL_NUM_ + i,-1);
    }
    editor.apply();

}


@Override
public void onClick(View view) {
    switch (view.getId()){

        case R.id.btn_prev_soal:
            prev_fragment(view);
            break;

        case R.id.btn_next_soal:
            next_fragment(view);
            break;

        case R.id.btn_akhiri_ujian:
            int jmlJawaban = ViewPagerSoalAdapter.listSoal.size();
            int jawabanUser;
            int jawabanBenar = 0, jawabanSalah = 0;
            for (int i = 0; i < jmlJawaban; i++){
                jawabanUser = sharedPreferences.getInt(GlobalVar.SOAL_NUM_ + i, 0);
                if (jawabanUser == 0){
                    jawabanSalah += 1;
                } else if (jawabanUser == 1){
                    jawabanBenar += 1;
                } else {
                    jawabanSalah += 1;
                    soalKosong.add(String.valueOf(i+1));

                }


            }


            ShowPopUp(jawabanBenar, jawabanSalah);
            break;

    }

}

@SuppressLint("SetTextI18n")
private void ShowPopUp( int jawabanBenar, int jawabanSalah) {

    TextView tvJwbKosong;
    Button btnKembali, btnKumpulkan;
    DisplayMetrics metrics = getResources().getDisplayMetrics();

    int width = metrics.widthPixels;
    int height = metrics.heightPixels;

    LayoutInflater inflater = this.getLayoutInflater();

    popupView = inflater.inflate(R.layout.popup_verifikasi_selesai,null);
    tvJwbKosong = popupView.findViewById(R.id.tv_jwb_kosong);
    btnKembali = popupView.findViewById(R.id.btn_popup_kembali);
    btnKumpulkan = popupView.findViewById(R.id.btn_popup_kumpulkan);
    int hasil = jawabanBenar * 100 / jmlSoal;


    btnKembali.setOnClickListener(view -> {
        soalKosong.clear();
        popDialogVerif.dismiss();
    });
    btnKumpulkan.setOnClickListener(view -> {
        Intent intent = new Intent(getApplicationContext(), FinishUjianActivity.class);
        intent.putExtra(GlobalVar.BENAR, jawabanBenar);
        intent.putExtra(GlobalVar.SALAH, jawabanSalah);
        intent.putExtra(GlobalVar.SCORE, hasil);
        startActivity(intent);
        finish();
    });



    popDialogVerif.setContentView(popupView);
    popDialogVerif.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    popDialogVerif.getWindow().setLayout((6*width)/7, (4*height)/5);


    if (soalKosong.isEmpty()){
        tvJwbKosong.setVisibility(View.GONE);
    } else {
        Toast.makeText(getApplicationContext(), soalKosong.toString(), Toast.LENGTH_LONG).show();
        tvJwbKosong.setText(getResources().getText(R.string.kamu_belum) + soalKosong.toString());
    }

    popDialogVerif.show();
}

private void next_fragment(View view) {
    if (vpSoal.getCurrentItem() != 0){
        vpSoal.setCurrentItem(vpSoal.getCurrentItem()-1);
    }
}

private void prev_fragment(View view) {
    if (vpSoal.getCurrentItem() < ViewPagerSoalAdapter.listSoal.size()){
        vpSoal.setCurrentItem(vpSoal.getCurrentItem()+1);
    }
}

}

Это мой адаптер для пейджера

public class ViewPagerSoalAdapter extends RecyclerView.Adapter<ViewPagerSoalAdapter.MyViewHolder> {
public static ArrayList<Soal> listSoal;

private Context context;
private TabLayout tabLayout;
private SharedPreferences sharedPreferences;
private View parentLayout;

public ViewPagerSoalAdapter(Context context, ArrayList<Soal> listSoal) {
    this.context = context;
    this.listSoal = listSoal;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_soal, parent, false);
    View parentLayout = parent.getRootView();
    tabLayout = parentLayout.findViewById(R.id.tl_soal);

    sharedPreferences = context.getSharedPreferences(GlobalVar.MYFILE_SP_SOAL, 0);

    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tvSoal.setText(listSoal.get(position).getSoal());
    holder.rbPgA.setText(listSoal.get(position).getPgA());
    holder.rbPgB.setText(listSoal.get(position).getPgB());
    holder.rbPgC.setText(listSoal.get(position).getPgC());
    holder.rbPgD.setText(listSoal.get(position).getPgD());

    if (!listSoal.get(position).getPhotoSoal().isEmpty()){
        holder.ivSoal.setVisibility(View.VISIBLE);
        Glide.with(context)
                .load(listSoal.get(position).getPhotoSoal())
                .apply(new RequestOptions().fitCenter())
                .into(holder.ivSoal);
    } else {
        holder.ivSoal.setVisibility(View.GONE);
    }

}

@Override
public int getItemCount() {
    return listSoal.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {
    TextView tvSoal;
    ViewPager vpSoal;
    ImageView ivSoal;
    RadioButton rbPgA,rbPgB,rbPgC,rbPgD,rbCheck;
    RadioGroup rgPg;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        tvSoal = itemView.findViewById(R.id.tv_soal);
        rbPgA = itemView.findViewById(R.id.rb_pg_a);
        rbPgB = itemView.findViewById(R.id.rb_pg_b);
        rbPgC = itemView.findViewById(R.id.rb_pg_c);
        rbPgD = itemView.findViewById(R.id.rb_pg_d);
        rgPg = itemView.findViewById(R.id.rg_pilihan_ganda);
        vpSoal = itemView.findViewById(R.id.vp_soal);
        ivSoal = itemView.findViewById(R.id.iv_soal);

        rgPg.setOnCheckedChangeListener((radioGroup, i) -> {

            rbCheck = radioGroup.findViewById(i);
            String JwbUser = rbCheck.getText().toString();

            int select =tabLayout.getSelectedTabPosition();
            TabLayout.Tab se = tabLayout.getTabAt(select);
            se.view.setBackgroundResource(R.drawable.selector_answered_tab_soal);

            if (JwbUser.equals(listSoal.get(getAdapterPosition()).getCorrectAns())){
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putInt(GlobalVar.SOAL_NUM_ + getAdapterPosition(), 1);
                editor.apply();
            } else {
                SharedPreferences.Editor editor =  sharedPreferences.edit();
                editor.putInt(GlobalVar.SOAL_NUM_ + getAdapterPosition(), 0);
                editor.apply();
            }

        });

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...