当单击 Android 中 RecyclerView 中的每个项目时,在 BottomSheetDialog 中以编程方式创建复选框的简单 code/effective 代码是什么 (Java)
What's simple code/effective code to create CheckBox Programmatically in BottomSheetDialog when click every item in RecyclerView in Android (Java)
我在 RecyclerView 中有 100 多个项目。这些天 我尝试创建简单的 code/effective 代码以编程方式在 BottomSheetDialog 中创建复选框 但没有成功。
我的目标:
- 在 RecyclerView 中单击每个项目都会显示带有不同数量复选框的 BottomSheetDialog。示例:
当点击 RecyclerView 中的 item[0] 将打开带有 7 个复选框的 BottomSheetDialog,如果点击 RecyclerView 中的 item[1] 将打开带有 286 个复选框的 BottomSheetDialog,或者如果点击 item[2] 将打开带有 200 个复选框的 BottomSheetDialog,并且等等。
This image will describe, what I meant.
我认为我的目标是可能的,而不是我为 RecyclerView 中的每个项目创建 100+ xml。使用 for 循环、数组和其他... 如果没有 simple/effective 代码以编程方式创建复选框,没关系,我将为 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>
非常感谢您的任何建议和帮助:)
最后,我有了在 BottomSheetDialog 中以编程方式创建复选框的简单代码。到目前为止,我对这段代码很满意。
我得到线索:
- 使用此 tutorial on Youtube
中的 LinearLayout 以编程方式选中复选框
- 并像
layout_bottom_sheet_ayat.xml
一样使用此 以编程方式转换 dp
因此,根据这些线索,我对以下代码进行了一些更改:
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>
谢谢大家:)
我在 RecyclerView 中有 100 多个项目。这些天 我尝试创建简单的 code/effective 代码以编程方式在 BottomSheetDialog 中创建复选框 但没有成功。
我的目标:
- 在 RecyclerView 中单击每个项目都会显示带有不同数量复选框的 BottomSheetDialog。示例:
当点击 RecyclerView 中的 item[0] 将打开带有 7 个复选框的 BottomSheetDialog,如果点击 RecyclerView 中的 item[1] 将打开带有 286 个复选框的 BottomSheetDialog,或者如果点击 item[2] 将打开带有 200 个复选框的 BottomSheetDialog,并且等等。
This image will describe, what I meant.
我认为我的目标是可能的,而不是我为 RecyclerView 中的每个项目创建 100+ xml。使用 for 循环、数组和其他... 如果没有 simple/effective 代码以编程方式创建复选框,没关系,我将为 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>
非常感谢您的任何建议和帮助:)
最后,我有了在 BottomSheetDialog 中以编程方式创建复选框的简单代码。到目前为止,我对这段代码很满意。
我得到线索:
- 使用此 tutorial on Youtube 中的 LinearLayout 以编程方式选中复选框
- 并像
layout_bottom_sheet_ayat.xml
一样使用此 以编程方式转换
dp
因此,根据这些线索,我对以下代码进行了一些更改:
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>
谢谢大家:)