質問するログイン新規登録

回答編集履歴

2

回答修正

2020/09/06 15:27

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -26,10 +26,12 @@
26
26
  // Inflate the layout for this fragment
27
27
  View v = inflater.inflate(R.layout.fragment_0, container, false);
28
28
 
29
- FragmentManager fragmentManager = getParentFragmentManager();
29
+ FragmentManager fragmentManager = getFragmentManager();
30
+ if(fragmentManager != null){
30
- FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
31
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
31
- fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
32
+ fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
32
- fragmentTransaction.commit();
33
+ fragmentTransaction.commit();
34
+ }
33
35
 
34
36
  return v;
35
37
  }

1

回答追加

2020/09/06 15:27

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -2,4 +2,38 @@
2
2
 
3
3
  [fragment遷移時、画面が重なり前のページが機能してしまう場合の対処法 | Qiita](https://qiita.com/rui0930/items/420cd3a6920d8c24948f)
4
4
 
5
- このサイトの例の場合、空のFrameLayoutを配置しています。この例に倣えば、コードでここにまずFragment1を描画し、ボタンの押下でFragment2に遷移させれば、重なって表示されることはないのではないかと思います。
5
+ このサイトの例の場合、空のFrameLayoutを配置しています。この例に倣えば、コードでここにまずFragment1を描画し、ボタンの押下でFragment2に遷移させれば、重なって表示されることはないのではないかと思います。
6
+
7
+ ---
8
+
9
+ > FrameLayoutにして見たところ
10
+
11
+ というのは、Fragment1のLinearLayoutCompatをFrameLayoutに変えてみたということでしょうか。そうではなく、「FrameLayoutのみ」の言わばFragment0を作成して、これをまず描画してみてはどうでしょうかということです。
12
+
13
+ fragment_0.xml
14
+ ```xml
15
+ <?xml version="1.0" encoding="utf-8"?>
16
+ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
17
+ android:id="@+id/container"
18
+ android:layout_width="match_parent"
19
+ android:layout_height="match_parent" />
20
+ ```
21
+ Fragment0.java
22
+ ```java
23
+ @Override
24
+ public View onCreateView(LayoutInflater inflater, final ViewGroup container,
25
+ Bundle savedInstanceState) {
26
+ // Inflate the layout for this fragment
27
+ View v = inflater.inflate(R.layout.fragment_0, container, false);
28
+
29
+ FragmentManager fragmentManager = getParentFragmentManager();
30
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
31
+ fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
32
+ fragmentTransaction.commit();
33
+
34
+ return v;
35
+ }
36
+ ```
37
+ のような感じで、fragment_0.xmlの空のFrameLayoutにcontainerとIDを付けて、Fragment0のonCreateView()で即座にFragment1にreplaceしてみてはどうでしょうか。
38
+
39
+ 一応、PageViewer2を用いて手元でテストしてみましたが、遷移前のFragment1の描画が残ることなくFragment2に切り替わります。