페이저없이 조각을 탐색하는 올바른 방법을 알아내는 데 문제가 있고 화면 방향의 구성 변경 중에 문제가 발생합니다. 표시/숨기기를 사용하여 조각을 볼 수 있고 기능적으로 만들었지 만 대신 분리/부착을 사용해야하는지 궁금합니다. 나는 또한 다시 스택에 물건을 추가하는 데 문제가 있고 나는 그것이 또한 쇼/숨기기의 사용으로 인한 것 같아요. Attach/detatch를 사용하는 것이 더 좋습니까? 아니면 마지막/현재 조각을 표시/숨기도록 뒤로 단추를 무시하는 방법이 있습니까?프래그먼트 분리/재 연결 대 표시/숨기기
동작 : 지도 조각과 목록 조각이 몇 가지 있습니다. 모든 것이 올바르게 시작되고 오리엔테이션이 변경되면 처음에는 작동합니다. 목록 뷰로 이동하면 올바르게 채워지지만 방향 변경시 목록에 데이터가없는 상태에서 다시 그려집니다. 지도보기도 다시 그려지고 내 호출기 제목 표시기 뒤에 표시됩니다. 누구든지이 문제를 해결하려면 올바른 방향으로 나를 가리켜 주실 수 있습니다. 나는 그것이 파편을 보여주고 숨기고있는 방식에 의한 것이라고 의심하고 있습니다.
여기에서 조각을 만들고 조각 관리자에 추가합니다. 나는 또한 표시/숨기기 부분을 표시했습니다.
@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;
}
}
방향 변경시 활동이 재개되지 않게하려면 manifest에 android : configChanges = "orientation | keyboardHidden"을 추가하면됩니다. – Faizan
Detach/Attach는 리소스를 비우는 반면 hide/show는 해제합니다. – Faizan