今回はかなり苦戦しました。(毎回ですけど)
タイトルの通りです。
どうにかこれを達成できたのでその手順を書きます。
まず全体の流れは
※④を訂正し、③を打ち消しました。(2019/3/7)
①listViewでクリックイベントの結果を取得
→②"listViewを表示しているfragment"に上述の結果を渡す
→③"上述のfragmentを表示しているactivity"に上述の結果を渡す
→④ ②のfragmentでdialog fragmentを表示する(訂正あり)
このようなややこしい流れになりました。
コメント欄にてご指摘をいただきましたが、③は完全に勘違いで、activityからしかdialogFragmentを呼び出せないということはなく、fragmentからdialogFragmentを直接呼び出すことが可能でした。④にて後述します。
というわけで手順を①から見ていきます。
①listViewでクリックイベントの結果を取得
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ここに処理を書く
}
});
これは毎度おなじみですね。
R.id.buttonのbuttonの部分は、xmlファイルのコンポーネントのIDと同じにしてください。
②"listViewを表示しているfragment"に上述の結果を渡す
これがなかなか見つからなかったコードです。
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ここに処理を書く
((ListView) parent).performItemClick(v, position, R.id.button);
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (view.getId()) {
case R.id.button:
//buttonがclickされたらここに飛びます
}
}
});
以上の処理で、fragmentに飛べます。
parentってなんぞや。
→getViewの引数、ViewGroupです。
positionってなんぞや。
→これもlistViewの引数getViewのint型の引数です
※getViewはアダプターを作るときに呼ばれるメソッドです。検索したら出てきます。
④ ②のfragmentでdialog fragmentを表示する(訂正あり)
アクティビティにdisplayDialogメソッドを追加します
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (view.getId()) {
case R.id.button:
//buttonがclickされたらここに飛びます
SomeDialogFragment dialog = new SomeDialogFragment();
dialog.show(getFragmentManager(), "tag");
}
}
});
dialog fragmentをインスタンス化してshowメソッドを呼ぶだけで表示できたようでとても悲しいです。
あと、getFragmentManagerとgetSupportFragmentManagerの違いについてもご指摘をいただきました。
以下はコメント欄の引用です。
バージョン違いではなく、継承元のクラスが何か、によって、getSupportFragmentManagerを使うべきなのかgetFragmentManagerを使うべきなのかが変わります。
android.app.Activityと、
android.app.DialogFragment
android.app.Fragment
なら、
Activity#getFragmentManagerを使うandroid.support.v7.app.AppCompatActivityと、
android.support.v4.app.Fragment
android.support.v4.app.DialogFragment
なら、
AppCompatActivity#getSupportFragmentManagerを使うこの組み合わせで使わないと、いろいろと不具合が起こります。
そして、API28(AndroidP)から、android.app.DialogFragmentとandroid.app.Fragmentは非推奨となったので、実質、後者の組み合わせで行くべきかと思います。
どっちかが新しいんだろうなくらいの感覚でテキトーにoption + enterで追加していたので、きちんと組み合わせがあったらしくちょっと感動しました。
@kasa_le さん
この度はありがとうございました。
精進します!
という感じでした。