如何向Android BottomSheet添加动态操作项?

3
我正在开发一个应用程序,该应用程序将实现类似于 Google 材料设计的 BottomSheet。我找到的只有可以添加到 Sheet 的静态操作,就像使用此库BottomSheet中的示例一样:
new BottomSheet.Builder(this).title("title").sheet(R.menu.list).listener(new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        switch (which) {
                            case R.id.help:
                                q.toast("Help me!");
                                break;
                        }
                    }
                }).show();

在这里,R.menu.list将静态操作加载到BottomSheet中。我想要的是向其中添加动态操作项,例如一个ArrayList的操作。有什么想法吗?
顺便说一句,我尝试将“bottom-sheet”标签添加到我的问题中,但我没有权限这样做。
1个回答

7
您可以使用.sheet()方法来完成:
BottomSheet bottomSheet = new BottomSheet.Builder(getActivity())
                    .title(R.string.sharing_warning_note)
                    .sheet(R.id.menu_facebook, facebookDrawable,
                            getString(R.string.publishing_settings_facebook))
                    .sheet(R.id.menu_vkontakte, vkontakteDrawable,
                            getString(R.string.publishing_settings_vkontakte))
                    .divider()
                    .listener(new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            switch (which) {
                                case R.id.menu_facebook:
                                    share(SocialNetworkType.FACEBOOK);
                                    break;
                                case R.id.menu_vkontakte:
                                    share(SocialNetworkType.VK);
                                    break;
                                default:
                            }
                        }
                    })
                    .build();
            bottomSheet.show();

-更新-

使用数组列表可以像这样:

BottomSheet bottomSheet = new BottomSheet.Builder(getActivity());
for (int i = 0; i<list.size(); i++) {
     String s = list.get(i);
     bottomSheet.sheet(i, null, s);
}
bottomSheet.build();
bottomSheet.show();

最后,这些菜单项是静态的。我有一个ArrayList的操作需要加载到表格中,这样做没有帮助!我不想要R.id.someItem。我需要将某种类型的ArrayList加载进去。 - undefined
它不是静态的,你可以这样写: .sheet(1, icon, "blabla") 在我的情况下,id已经在res/ids.xml中声明了,但它不是一个菜单。 - undefined
你的解决方案使用了已存在的资源ID,例如 R.id.menu_facebook,但我不想要那样。有没有什么办法可以像这样做:sheet(new ArrayList)?或者类似的东西? - undefined
不必使用现有的ID,你可以使用任何正整数。我已经更新了我的答案,使用了字符串的ArrayList。 - undefined
谢谢,我很感激 :) - undefined
我遇到了类似的问题,如果我想要动态设置菜单项的可见性,我们该怎么做?new BottomSheet.Builder(this) .setSheet(R.menu.menu_items) .grid() .setTitle("菜单") .setListener(this) .show(); - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接