回答編集履歴

2

回答修正

2020/09/06 15:27

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -54,13 +54,17 @@
54
54
 
55
55
 
56
56
 
57
- FragmentManager fragmentManager = getParentFragmentManager();
57
+ FragmentManager fragmentManager = getFragmentManager();
58
58
 
59
- FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
59
+ if(fragmentManager != null){
60
60
 
61
- fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
61
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
62
62
 
63
+ fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
64
+
63
- fragmentTransaction.commit();
65
+ fragmentTransaction.commit();
66
+
67
+ }
64
68
 
65
69
 
66
70
 

1

回答追加

2020/09/06 15:27

投稿

keicha_hrs
keicha_hrs

スコア6768

test CHANGED
@@ -7,3 +7,71 @@
7
7
 
8
8
 
9
9
  このサイトの例の場合、空のFrameLayoutを配置しています。この例に倣えば、コードでここにまずFragment1を描画し、ボタンの押下でFragment2に遷移させれば、重なって表示されることはないのではないかと思います。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ > FrameLayoutにして見たところ
18
+
19
+
20
+
21
+ というのは、Fragment1のLinearLayoutCompatをFrameLayoutに変えてみたということでしょうか。そうではなく、「FrameLayoutのみ」の言わばFragment0を作成して、これをまず描画してみてはどうでしょうかということです。
22
+
23
+
24
+
25
+ fragment_0.xml
26
+
27
+ ```xml
28
+
29
+ <?xml version="1.0" encoding="utf-8"?>
30
+
31
+ <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
32
+
33
+ android:id="@+id/container"
34
+
35
+ android:layout_width="match_parent"
36
+
37
+ android:layout_height="match_parent" />
38
+
39
+ ```
40
+
41
+ Fragment0.java
42
+
43
+ ```java
44
+
45
+ @Override
46
+
47
+ public View onCreateView(LayoutInflater inflater, final ViewGroup container,
48
+
49
+ Bundle savedInstanceState) {
50
+
51
+ // Inflate the layout for this fragment
52
+
53
+ View v = inflater.inflate(R.layout.fragment_0, container, false);
54
+
55
+
56
+
57
+ FragmentManager fragmentManager = getParentFragmentManager();
58
+
59
+ FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
60
+
61
+ fragmentTransaction.replace(R.id.container, Fragment1.newInstance());
62
+
63
+ fragmentTransaction.commit();
64
+
65
+
66
+
67
+ return v;
68
+
69
+ }
70
+
71
+ ```
72
+
73
+ のような感じで、fragment_0.xmlの空のFrameLayoutにcontainerとIDを付けて、Fragment0のonCreateView()で即座にFragment1にreplaceしてみてはどうでしょうか。
74
+
75
+
76
+
77
+ 一応、PageViewer2を用いて手元でテストしてみましたが、遷移前のFragment1の描画が残ることなくFragment2に切り替わります。