gpt4 book ai didi

android - BottomSheetDialog/BottomSheetDialogFragment——使用哪个以及如何使用?

转载 作者:IT王子 更新时间:2023-10-28 23:32:04 29 4
gpt4 key购买 nike

我正在开发一个 Material Design 应用。我想要实现的一个功能是某种民意调查。当用户单击列表中的某个元素时,应该会显示如下所示的持久 Bottom Sheet 对话框:

Persistent bottom sheet dialog with question and three buttons.

然后,当用户单击任何按钮时,该对话框应该消失,并且应该显示模态 Bottom Sheet 对话框,为用户提供有关在开始时单击的列表项的更多信息。它看起来像这样:

A modal bottom sheet dialog which shows up after one of the buttons is clicked

我找不到任何关于 BottomSheetDialog 和 BottomSheetDialogFragment 的明确解释,以及如何正确使用它们,即使在阅读了有关 AppCompat 对话框的一些信息之后也是如此。所以,我的问题是:

  1. 它们有什么不同,我应该使用哪一个案例?
  2. 如何在 Activity 中获取有关在对话框中按下了哪个按钮的数据?
  3. 是否有实现代码的链接或有关使用它们的教程?

最佳答案

最后,我找到了解决方案并且它有效。告诉我我是否做错了什么。它基本上像 this guide 中的 DialogFragment 一样工作。 ,但我做了一些不同的事情。

1) 它们的区别和DialogFragment和Dialog一样,都是模态的。如果您需要持久对话,请使用 BottomSheetBehaviour instead (我发现在我的应用中这两个对话框都必须是模态的)。

2)我必须先用一些代码回答第三个问题,然后再回答第二个问题。

3) 创建一个新的public class,它extends BottomSheetDialogFragment,我称之为FragmentRandomEventPoll。这里有两两件事必须实现。

  • 重写方法onCreateView。它与 Activity 中的 onCreate 方法几乎相同,除了它返回它应该膨胀的 View :

    // We will need it later
    private static String headerItem;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_random_event_poll, container, false);
    header = (TextView) v.findViewById(R.id.uRnd_fragment_bottom_sheet_poll_header);
    skip = (Button) v.findViewById(R.id.uRnd_fragment_bottom_sheet_button_skip);
    header.setText(...);

    // I implemented View.OnClickListener interface in my class
    skip.setOnClickListener(this);
    return v;
    }
  • 静态方法,您可以将必要的数据传递给该类并获取该类的新实例(可能我可以只使用常规构造函数,我将不得不对其进行更多试验)。 URandomEventListItem 是数据模型类。

    public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
    FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
    headerItem = item.getHeader();
    return fragment;
    }

2) 要在 Activity 或任何其他地方获取输入事件,请定义一个包含必要方法的接口(interface)并为其实例创建 setter 方法:

private PollButtonClickListener listener;

public void setListener(PollButtonClickListener listener) {
this.listener = listener;
}

public interface PollButtonClickListener {
void onAnyButtonClick(Object data)
}

在你想要获取数据的地方(布局中指定了“dialog_event_poll”标签):

FragmentRandomEventPoll poll = FragmentRandomEventPoll.newInstance(events.get(id));
poll.setListener(new FragmentRandomEventPoll.PollButtonClickListener() {
@Override
public void onAnyButtonClick(Object data) {
// Do what you want with your data
}
});
poll.show(getSupportFragmentManager(), "dialog_event_poll");
}

如果有什么不清楚的地方,我的项目文件可以在 Github 上找到。 .

关于android - BottomSheetDialog/BottomSheetDialogFragment——使用哪个以及如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716312/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com