首页 > 解决方案 > 单击Android(Java)中RecyclerView中的每个项目时,在BottomSheetDialog中以编程方式创建CheckBox的简单代码/有效代码是什么

问题描述

我在 RecyclerView 中有 100 多个项目。这些天来,我尝试创建简单的代码/有效代码以编程方式在 BottomSheetDialog 中创建复选框,但没有成功。

我的目标 :

当单击 RecyclerView 中的 item[0] 将打开带有 7 个复选框的 BottomSheetDialog,如果单击 RecyclerView 中的 item[1] 将打开带有 286 个复选框的 BottomSheetDialog,或者如果单击 item [2] 将打开带有 200 个复选框的 BottomSheetDialog,依此类推。

这张图片将描述我的意思。

我认为我的目标是可能的,而是为 RecyclerView 中的每个项目创建 100 多个 xml。使用 for 循环、数组和其他...如果没有用于以编程方式创建复选框的简单/有效代码,没关系我将为 RecyclerView 的每个 itemListener 创建 100+ xml

我尝试过的:

我成功添加了单个复选框,但未能添加其他复选框。这是我的代码:

注意:我评论for looping是因为它不起作用。好的,谢谢大家:)

        @Override
        public void onClick(View v) {
            int itemPosition = recyclerViewSurat.getChildLayoutPosition(v);
            String namaSurat = suratList.get(itemPosition).getNamaSurat();
//            Toast.makeText(context, namaSurat, Toast.LENGTH_SHORT).show();


            BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context, R.style.BottomSheetDialogTheme);
            bottomSheetDialog.setContentView(R.layout.layout_bottom_sheet_ayat);

            ConstraintLayout constraintLayout = bottomSheetDialog.findViewById(R.id.constraintLayoutCheckBox);
            ConstraintSet constraintSet = new ConstraintSet();
            ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(
                    ConstraintLayout.LayoutParams.MATCH_PARENT,
                    ConstraintLayout.LayoutParams.WRAP_CONTENT
            );

            int margin = (int) convertDpToPixel(30F, context);
            params.setMargins(margin,0,0,0);

//            for (int i = 0; i < 10; i++) {
//                AppCompatCheckBox compatCheckBox = new AppCompatCheckBox(context);
//                compatCheckBox.setId(i + 1);
//                compatCheckBox.setText("Ayat " + i);
//                compatCheckBox.setPadding(25, 0,0,0);
//                constraintLayout.addView(compatCheckBox, params);
//
//                constraintSet.clone(constraintLayout);
//                constraintSet.connect(compatCheckBox.getId(), ConstraintSet.TOP, compatCheckBox.getId() + i, ConstraintSet.BOTTOM, 0);
//                constraintSet.applyTo(constraintLayout);
//            }

            AppCompatCheckBox compatCheckBox = new AppCompatCheckBox(context);
            compatCheckBox.setId(R.id.checkbox2);
            compatCheckBox.setText("Ayat 1");
            compatCheckBox.setPadding(25, 0,0,0);
            constraintLayout.addView(compatCheckBox, params);

            constraintSet.clone(constraintLayout);
            constraintSet.connect(compatCheckBox.getId(), ConstraintSet.TOP, R.id.checkbox1, ConstraintSet.BOTTOM, 0);
            constraintSet.applyTo(constraintLayout);





//            constraintLayout.addView(checkBox);
            bottomSheetDialog.show();

        }

        private float convertDpToPixel(float dp, Context context) {
            return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);

        }
    }

这里我的layout_bottom_sheet_ayat.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/bottomSheetLinearLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bottom_sheet_ayat"
    android:orientation="vertical"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="15dp"
        android:text="Pilih Ayat"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold"/>
    
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="5dp"
        android:background="@color/white"/>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayoutCheckBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <androidx.appcompat.widget.AppCompatCheckBox
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/checkbox1"
            android:layout_marginStart="15dp"
            android:layout_marginTop="24dp"
            android:padding="10dp"
            android:checked="false"
            android:enabled="true"
            android:text="Semua Ayat"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="16dp" />



    </androidx.constraintlayout.widget.ConstraintLayout>

</androidx.appcompat.widget.LinearLayoutCompat>

非常感谢您的任何建议和帮助:)

标签: javaandroidcheckboxandroid-recyclerviewandroid-bottomsheetdialog

解决方案


最后,我有简单的代码在 BottomSheetDialog 中以编程方式创建复选框。到目前为止,我对这段代码感到满意。

我得到了线索:

因此,根据这些线索,我对下面的代码进行了一些更改:

private class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            int itemPosition = recyclerViewSurat.getChildLayoutPosition(v);
            String jumlahAyat = suratList.get(itemPosition).getJumlahAyat();


            BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context, R.style.BottomSheetDialogTheme);
            bottomSheetDialog.setContentView(R.layout.layout_bottom_sheet_ayat);

            LinearLayoutCompat linearLayoutCheckBox = bottomSheetDialog.findViewById(R.id.linearLayoutCheckBox);
            LinearLayoutCompat.LayoutParams params = new LinearLayoutCompat.LayoutParams(
                    LinearLayoutCompat.LayoutParams.MATCH_PARENT,
                    LinearLayoutCompat.LayoutParams.WRAP_CONTENT
            );

            int margin = (int) convertDpToPixel(30F, context);
            params.setMargins(margin, 0,0,0);



            AppCompatCheckBox compatCheckBox;
            int banyakAyat = Integer.parseInt(jumlahAyat);

            for (int i = 1; i <= banyakAyat; i++) {
                compatCheckBox = new AppCompatCheckBox(context);
                compatCheckBox.setId(i);
                compatCheckBox.setText("Ayat " + i);
                int margin1 = (int) convertDpToPixel(10F, context);
                compatCheckBox.setPadding(margin1,0,0,0);
                linearLayoutCheckBox.addView(compatCheckBox, params);
            }

            bottomSheetDialog.show();

        }

        private float convertDpToPixel(float dp, Context context) {
            return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);

        }
    }

和我的layout_bottom_sheet_ayat.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/bottomSheetLinearLayout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="550dp"
    android:background="@drawable/bottom_sheet_ayat"
    android:orientation="vertical"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="15dp"
        android:text="Pilih Ayat"
        android:textColor="@color/black"
        android:textSize="20sp"
        android:textStyle="bold"/>
    
    <View
        android:id="@+id/viewId"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginBottom="5dp"
        android:background="@color/white"/>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.LinearLayoutCompat
            android:id="@+id/linearLayoutCheckBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <androidx.appcompat.widget.AppCompatCheckBox
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:id="@+id/checkbox1"
                android:layout_marginTop="24dp"
                android:padding="10dp"
                android:checked="false"
                android:enabled="true"
                android:text="Semua Ayat"
                android:layout_marginLeft="15dp"
                android:layout_marginStart="15dp" />

        </androidx.appcompat.widget.LinearLayoutCompat>


    </androidx.core.widget.NestedScrollView>





</androidx.appcompat.widget.LinearLayoutCompat>

所以谢谢大家:)


推荐阅读