在 Android 中,BottomSheet 通常用于在一個界面中展示額外的信息或操作選項。要處理多個 BottomSheet,你可以采用以下方法:
在這種方法中,你可以為每個 BottomSheet 創建一個單獨的布局文件,并在主布局文件中添加一個 ViewPager 或 RecyclerView。然后,你可以為每個 BottomSheet 分配一個頁面或列表項。當用戶切換不同的頁面或列表項時,BottomSheet 會顯示相應的布局。
示例代碼:
主布局文件(activity_main.xml):
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
每個 BottomSheet 的布局文件(例如:bottom_sheet_1.xml 和 bottom_sheet_2.xml):
<!-- bottom_sheet_1.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<!-- 在這里添加你的 BottomSheet 內容 -->
</LinearLayout>
在 Activity 或 Fragment 中設置 ViewPager2:
public class MainActivity extends AppCompatActivity {
private ViewPager2 viewPager;
private BottomSheetPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
adapter = new BottomSheetPagerAdapter(this);
viewPager.setAdapter(adapter);
}
}
BottomSheetPagerAdapter:
public class BottomSheetPagerAdapter extends RecyclerView.Adapter<BottomSheetPagerAdapter.BottomSheetViewHolder> {
private Context context;
public BottomSheetPagerAdapter(Context context) {
this.context = context;
}
@NonNull
@Override
public BottomSheetViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.bottom_sheet_1, parent, false);
return new BottomSheetViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull BottomSheetViewHolder holder, int position) {
// 根據 position 設置不同的底部表布局
}
@Override
public int getItemCount() {
return 2; // 假設有兩個底部表
}
static class BottomSheetViewHolder extends RecyclerView.ViewHolder {
public BottomSheetViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}
在這種方法中,你可以為每個底部表創建一個單獨的 BottomSheetDialog。當用戶需要查看不同的底部表時,可以顯示相應的 BottomSheetDialog。
示例代碼:
創建一個自定義的 BottomSheetDialogFragment:
public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View contentView = inflater.inflate(R.layout.bottom_sheet_dialog, null);
builder.setView(contentView);
return builder.create();
}
}
在 Activity 或 Fragment 中顯示不同的底部表:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = findViewById(R.id.button1);
button1.setOnClickListener(v -> showBottomSheet1());
Button button2 = findViewById(R.id.button2);
button2.setOnClickListener(v -> showBottomSheet2());
}
private void showBottomSheet1() {
CustomBottomSheetDialogFragment bottomSheetDialog = new CustomBottomSheetDialogFragment();
bottomSheetDialog.show(getSupportFragmentManager(), "BottomSheet1");
}
private void showBottomSheet2() {
CustomBottomSheetDialogFragment bottomSheetDialog = new CustomBottomSheetDialogFragment();
bottomSheetDialog.show(getSupportFragmentManager(), "BottomSheet2");
}
}
這樣,你就可以在一個界面中處理多個 BottomSheet 了。根據你的需求,可以選擇適合你的方法。