如何使我的底部工作表对话框动态化?

Posted

技术标签:

【中文标题】如何使我的底部工作表对话框动态化?【英文标题】:How do I make my Bottom Sheet Dialog dynamic? 【发布时间】:2021-12-25 11:06:29 【问题描述】:

这是我第一次尝试在我的 android Studio 项目中实现 BottomSheetDialog。为了更熟悉这个过程,我尝试在 Youtube 上遵循本教程:https://youtu.be/hfoXhiMTc0c。在我的实际 Java 类中,当我扫描包含不同信息的 NFC 芯片时,将激活 BottomSheet。但是我无法在工作表上动态显示来自芯片的信息。我猜这是由于工作表是静态的?我如何能够显示来自芯片的信息,这些信息已经存储在我的 Java 类的变量中,以显示在 BottomSheet 的文本字段中?

感谢您的帮助,谢谢!

这是扩展BottomSheet的java类的代码sn-p:

final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(

                Scan.this, R.style.BottomSheetDialogTheme
        );
        View bottomSheetView = LayoutInflater.from(getApplicationContext())
                .inflate(
                        R.layout.layout_bottom_sheet,
                        (LinearLayout)findViewById(R.id.bottomSheetContainer)

                );
        bottomSheetView.findViewById(R.id.addToCloset).setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                bottomSheetDialog.dismiss();
            
        );
        bottomSheetDialog.setContentView(bottomSheetView);
        bottomSheetDialog.show();```

【问题讨论】:

【参考方案1】:

我不熟悉BottomSheetDialog。但是,

        View bottomSheetView = LayoutInflater.from(getApplicationContext())
            .inflate(
                    R.layout.layout_bottom_sheet,
                    (LinearLayout)findViewById(R.id.bottomSheetContainer)

            );

您应该可以将上面的代码替换为,

    View bottomSheetView = LayoutInflater.from(getApplicationContext())
        .inflate(
                R.layout.layout_bottom_sheet,
                null

        );

现在转到 layout_bottom_sheet.xml 布局文件。根据您的代码,它应该具有没有 id 的线性布局。给它一个id。我将把那个 id 作为“test_ll”。

现在下面的代码就可以了,

LinearLayout ll = bottomSheetView.findViewById(R.id.test_ll);

之后,您可以将视图动态添加到 ll。如需动态添加视图到 LinearLayout,请参考,

Add text view to Linear layout

编辑:

如果你想在 LinearLayout 中使用视图,你可以这样做,

View view = ll.findViewById(R.id.view_id);

如果你的文本视图在 ll 中,

TextView textView1 = ll.findViewById(R.id.tvcolor);       
textView1.setText("Hello!!");

这会解决你的问题。

【讨论】:

完美,非常感谢!除了一件事之外,一切现在都在工作。您好心发给我的链接不太适合我的问题,因为我只是想访问 .xml 文件的现有 TextView 而不是尝试创建新的。我尝试使用:TextView textView1 = (TextView)findViewById(R.id.tvcolor); textView1.setText("Hello!!"); 但是,当尝试运行代码时,应用程序正在崩溃:(。关于如何修复的任何想法? 该文本视图是否在 LinearLayout 中? 检查我答案的编辑部分。它可能会解决您的问题。

以上是关于如何使我的底部工作表对话框动态化?的主要内容,如果未能解决你的问题,请参考以下文章

在android应用程序中扩展底部工作表对话框

如何在android的底部工作表对话框中隐藏软键

如何在颤动中更改底部工作表对话框内的文本?

Android 底部工作表模式(对话框)未完全打开

如何从另一个活动或底部工作表对话框/片段中关闭一个活动

将数据从底部工作表对话框片段传递到片段