より広い画面にマルチペイン レイアウトを使用したい。データは永続化されSQL
、各フラグメントは適切なデータを取得します。追加のレイアウト xml ファイルは、リソース ディレクトリ フォルダー (つまり、layout-w500dp) に
ありますが、奇妙な動作がいくつかあります。
何かを選択してから戻るボタンを押した後にのみ機能するようです。
Atm 最大 2 つの FrameLayouts を使用していますが、後で 4 つ使用したいと考えています。最も深い選択のレベルを確認し、それに応じてフラグメントを割り当てます。(ここでは lvl 1 までしかありませんが、後で lvl3 までの選択が必要です)。
これが私が達成したいことです。
これはonCreate
、選択が行われたときに呼び出されます。
private void setScreens(){
int i = getLowestSelection();//returns 0 when nothing is selected.
//And 1 if selection is made in lvl1 ...
int p = 1;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (findViewById(R.id.fragtwo) != null) {
p = 2;
if (i == 1){
SectionsScreen secondFragment = new SectionsScreen();
transaction.replace(R.id.fragtwo,secondFragment);
}
}
if (findViewById(R.id.fragone) != null) {
if(p == 2){
if (i == 0 ){
StatuteScreen statuteScreenFragment = new StatuteScreen();
transaction.replace(R.id.fragone,statuteScreenFragment);
}
}
if (p == 1){
if (i == 0){
StatuteScreen statuteScreenFragment = new StatuteScreen();
transaction.replace(R.id.fragone,statuteScreenFragment);
}
else if (i == 1){
SectionsScreen sectionsScreenFragment = new SectionsScreen();
transaction.replace(R.id.fragone,sectionsScreenFragment);
}
}
}
transaction.addToBackStack(null);
transaction.commit();
}
現時点では、次のことを行った場合にのみ機能します。
- アプリケーションの開始 = 縦向きと横向きの 1 つのフラグメント (これは望ましい動作です)
- ポートレートで選択する = 何も起こりません!!!! (ここが問題)
- 横向きに切り替える = 正しい選択で 2 つのフラグメント (正しい動作)
(横向きで最初の選択を行う場合は、縦向きに回転させてから再度戻す必要があります) - Portrait = LvL 2 Fragment with right Data (右の動作) に切り替えます。
- 戻るボタンを押す = LvL 1 Fragment (正しい動作)
- これからは、縦向きから横向きに切り替えることができ、すべての向きでアイテムを選択するための正しい動作が得られます。ランドスケープのバックプレスでも、選択が取り除かれると、レベル 1 のフラグメントが 1 つだけ表示されます。
この動作が発生するのはなぜですか?
そして、これはそもそも正しいアプローチですか?
これをさらにレベルとscreenWidthsに拡張したいと考えています!
すなわち:
ここでバックスタックは適切に機能しますか? 誰か追加情報が必要な場合は、言ってください。喜んで追加します。