最後に、解決策が見つかりました。私が何か悪いことをしているかどうか教えてください。基本的にはthis guideのDialogFragmentのように動作しますが、少し違っています。
1)DialogFragmentとDialogの違いは同じですが、どちらもモーダルです。永続的なダイアログが必要な場合は、BottomSheetBehaviour insteadを使用してください(私は両方のダイアログが私のアプリケーションでモーダルでなければならないことがわかりました)。
2)最初に3番目の質問に答える必要があり、2番目の質問に答えるのは簡単です。
3)新しいpublic class
を作成します。extends BottomSheetDialogFragment
という名前のFragmentRandomEventPollを作成しました。ここに実装する必要があるのは2つあります。
オーバーライドメソッド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;
}
あなたに必要なデータを渡すと、このクラスの新しいインスタンスを取得することができstaticメソッド(おそらく私ができます通常のコンストラクタを使用したばかりですが、もう少し試してみる必要があります)。 URandomEventListItem
はデータモデルクラスです。 、アクティビティや他の場所での入力イベントを取得する必要なメソッドとのインターフェースを定義し、それは、インスタンスのためにsetterメソッドを作成するには
public static FragmentRandomEventPoll newInstance(URandomEventListItem item) {
FragmentRandomEventPoll fragment = new FragmentRandomEventPoll();
headerItem = item.getHeader();
return fragment;
}
2):
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にあります。