最终,我找到了解决方案并且它起作用了。如果我做错了什么,请告诉我。它基本上像这个指南中的DialogFragment一样工作,但是我做了一些不同的事情。
1)它们的区别与DialogFragment和Dialog的区别相同,它们都是模态的。如果您需要持久对话框,请使用BottomSheetBehaviour(我发现在我的应用程序中两个对话框都必须是模态的)。
2)我必须先用一些代码回答第三个问题,然后回答第二个问题就容易了。
3)创建一个新的public class
,它extends BottomSheetDialogFragment
,我称其为FragmentRandomEventPoll。这里必须实现两件事。
Override method onCreateView
. It is nearly the same as onCreate
method in Activities, except for that it returns the View it should inflate:
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(...);
skip.setOnClickListener(this);
return v;
}
Static method which you can pass necessary data to and get new instance of this class (Probably I could have just used a regular constructor, I'll have to experiment with it a bit more). URandomEventListItem
is the data model class.
public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
headerItem = item.getHeader();
return fragment;
}
2) 要在activity或其他任何位置获取输入事件,请定义一个带有必要方法的接口并创建其实例的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) {
}
});
poll.show(getSupportFragmentManager(), "dialog_event_poll");
}
如果有任何不清楚的地方,我的项目文件可以在 Github 上找到:
Github。