最後に、解決策を見つけて動作します。私が何か間違ったことをしているなら教えてください。基本的にはこのガイドの DialogFragment と同じように機能しますが、私は少し違うやり方をしています。
1) DialogFragment と Dialog の違いと同じで、どちらもモーダルです。永続的なダイアログが必要な場合は、代わりに BottomSheetBehaviour を使用してください(私のアプリでは両方のダイアログをモーダルにする必要があることがわかりました)。
2) 最初に 3 番目の質問に何らかのコードで答える必要があり、それから 2 番目の質問に簡単に答えることができます。
3) FragmentRandomEventPoll と名付けた新しいpublic class
を作成します。extends BottomSheetDialogFragment
ここで実装しなければならないことが 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;
}
必要なデータを渡してこのクラスの新しいインスタンスを取得できる静的メソッド (おそらく、通常のコンストラクターを使用することもできたので、もう少し実験する必要があります)。URandomEventListItem
データモデルクラスです。
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で見つけることができます。