ページャなしでフラグメントをナビゲートする適切な方法を見つけられず、画面の向きを変更する際に問題が発生します。私は、表示/非表示を使用してそれらを表示し、機能させるためにフラグメントに使用していますが、代わりにDetach/Attachを使用する必要があるかどうか疑問に思っています。私はまた、バックスタックに物事を追加する問題を抱えていると私はそれもショー/非表示の使用によると思う。アタッチ/デタッチを使用する方が良いですか?または、最後の/現在のフラグメントを表示/非表示にするために、戻るボタンがオーバーライドする方法がオーバーライドされていますか?フラグメントデタッチ/再接続Vs表示/非表示
動作: マップフラグメントとリストフラグメントがいくつかあります。すべてが正しく起動し、最初は向きが変わっています。リストビューにナビゲートすると、正しく挿入されますが、向きが変更されると、リストにはデータがなくなり、リストが再描画されます。マップビューも再描画され、私のページャータイトルインジケーターの後ろに表示されます。 もし誰かがこれを解決するための正しい方向に私を指してくれればそれはすばらしいでしょう。私はそれがフラグメントを表示して隠しているということが原因であると考えています。
ここで私はフラグメントを作成し、フラグメントマネージャに追加します。私はまた、フラグメントを表示/非表示する場所を示しました。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_frags);
mapViewContainer = LayoutInflater.from(this)
.inflate(R.layout.map, null);
setupFragments();
showFragment(0);
}
public void setListData(String name) {
bName = name;
showFragment(1);
}
private void setupFragments() {
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
mFragment1 = fm.findFragmentByTag("f1");
if (mFragment1 == null) {
mFragment1 = new MenuFragment();
ft.add(mFragment1, "f1");
ft.hide(mFragment1);
}
mMapFragment = (MapFragment) getSupportFragmentManager()
.findFragmentByTag(MapFragment.TAG);
if (mMapFragment == null) {
mMapFragment = MapFragment.newInstance(0);
ft.add(R.id.fragment_container, mMapFragment, MapFragment.TAG);
}
ft.hide(mMapFragment);
myListFragment = (ListFrag) getSupportFragmentManager()
.findFragmentByTag(ListFrag.TAG);
if (myListFragment == null) {
myListFragment = new ListFrag();
ft.add(R.id.fragment_container, myListFragment, ListFrag.TAG);
}
ft.hide(myListFragment);
frag = (frag) getSupportFragmentManager().findFragmentByTag(
frag.TAG);
if (frag == null) {
bacFrag = new frag();
ft.add(R.id.fragment_container, frag, frag.TAG);
}
ft.hide(bacFrag);
ft.commit();
}
public void showFragment(int fragIn) {
final FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
if (mVisible != null) {
if (mVisible == mListFragment) {
ft.remove(mListFragment);
} else {
ft.hide(mVisible);
}
}
switch (fragIn) {
case 0:
ft.show(mMapFragment);
ft.commit();
mVisible = mMapFragment;
break;
case 1:
mListFragment = (ListFragmentDisplay) getSupportFragmentManager()
.findFragmentByTag(ListFragmentDisplay.TAG);
Toast.makeText(this, "startListFrag", Toast.LENGTH_LONG).show();
if (mListFragment == null) {
mListFragment = new ListFragmentDisplay();
ft.add(R.id.fragment_container, mListFragment,
ListFragmentDisplay.TAG);
}
ft.show(mListFragment).commit();
mVisible = mListFragment;
break;
case 2:
ft.show(myfragment).commit();
mVisible = myfragment;
break;
case 3:
ft.show(frag).commit();
mVisible = frag;
break;
}
}
オリエンテーションの変更を再開できないようにするには、マニフェストにandroid:configChanges = "orientation | keyboardHidden"を追加します。 – Faizan
Detach/Attachはリソースを解放しますが、hide/showは解放しません。 – Faizan