最后,我找到了解决方案并且它有效。告诉我我是否做错了什么。它基本上像本指南中的 DialogFragment 一样工作,但我做了一些不同的事情。
1)它们的区别与DialogFragment和Dialog一样,都是模态的。如果您需要持久对话框,请改用BottomSheetBehaviour(我发现两个对话框在我的应用程序中都必须是模态的)。
2)我必须先用一些代码回答第三个问题,然后再回答第二个问题。
3) 创建一个新public class
的,extends BottomSheetDialogFragment
我称之为 FragmentRandomEventPoll。这里有两两件事必须实现。
覆盖方法onCreateView
。它与活动中的方法几乎相同onCreate
,除了它返回它应该膨胀的视图:
// 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)要在活动或任何其他地方获取输入事件,请定义具有必要方法的接口并为其实例创建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上找到。