私の現在のAndroidアプリケーションは、2つのフラグメントを持っている: -Androidのフラグメントを正しく表示/隠す方法は?
ListFragment
Detailfragment
マイレイアウトXMLは次のようになります。 -
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchorGravity="bottom"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
次のように私は最初ListFragmentを表示: -
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG);
if (mLandscape) {
} else {
fragmentTransaction.addToBackStack(LIST_FRAGMENT_TAG);
}
fragmentTransaction.commit();
ユーザーリスト項目をクリックすると、現在のリスト位置などを保持するようにリストを非表示にし、detailFragmentを表示します。
は、相続人のコードは、私はこのUIの変更を実行するために使用します。 -
mDetailFragment = new DetailFragment();
final Bundle fragmentArguments = new Bundle();
fragmentArguments.putString(ITEM_KEY, item.getKey());
mDetailFragment.setArguments(fragmentArguments);
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (mLandscape) {
fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG);
} else {
fragmentTransaction.hide(mListFragment);
fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG);
}
fragmentTransaction.commit();
上記のコードは、すべてが正常に動作し、私は正常一覧と詳細フラグメントの間を遷移することができます。
問題は、ユーザーがDetail FragmentのBACKボタンを押してListFragmentに戻ると、空の画面に戻ることです。
私はディテールフラグメントを削除し、隠されたリストのフラグメントを示すために、私の活動でこのコードを持っている: -
@Override
public void onBackPressed() {
if (mLandscape) {
} else {
if (mListFragment.isHidden()) {
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(mDetailFragment);
fragmentTransaction.show(mListFragment);
fragmentTransaction.commit();
}
}
super.onBackPressed();
}
はなぜfragmentTransaction.show(mListFragment);
隠しListFragmentが表示されませんか?
注:私はいつも、私はHERESに私はこの問題を修正する方法super.onCreate(savedInstanceStateNull);
private final Bundle savedInstanceStateNull = null;
private boolean mLandscape = false;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceStateNull);
setContentView(R.layout.activity_article_list);
mLandscape = getResources().getBoolean(R.bool.landscape);
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
manageFragments();
}
ウル問題はListFragmentですが、コードから非表示オプションを削除し、バックスタックにフラグメントを追加しようと非表示postion – Nithinlal
です。私はあなたの問題が解決されるかもしれないと思う。 – Nithinlal
もう1つのことはonBackPressedのelse部分を削除し、popBackStack() – Nithinlal