한 번에 하나씩 조각이있는 세 개의 탭 (ActionBar 탭)이있는 앱이 있습니다.하나의 ActionBar 탭 내부에서만 조각 사이의 트랜잭션
TabListener
TabsActivity
TAB1 -> ListFragment1 -> ListFragment2 -> Fragment3
TAB2 -> Tab2Fragment
tab3에 -> Tab3Fragment
내가 만들 때 문제가 ListFragment1에서 ListFragment2 로의 FragmentTransaction (OnListItemClicked 내부), 다른 t 내부의 프래그먼트 abs 또한 ListFragment2로 변경됩니다.
결국에는 조각 내에서만 조각을 변경하고 다른 탭의 상태를 유지하려고합니다.
저는 상태 (OnSavedInstance())를 이미 저장하고 있습니다. 내가 여기에없는 것을 알고 있습니까?
코드의 일부 :
public class TabsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabs);
// setup Action Bar for tabs
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// instantiate fragment for the tab
Fragment networksFragment = new NetworksFragment();
// add a new tab and set its title text and tab listener
actionBar.addTab(actionBar.newTab().setText("Tab1")
.setTabListener(new TabsListener(ListFragment1)));
// instantiate fragment for the tab
Fragment historyFragment = new HistoryFragment();
// add a new tab and set its title text and tab listener
actionBar.addTab(actionBar.newTab().setText("Tab2")
.setTabListener(new TabsListener(Tab2Fragment)));
// instantiate fragment for the tab
Fragment settingsFragment = new SettingsFragment();
// add a new tab and set its title text and tab listener
actionBar.addTab(actionBar.newTab().setText("Tab3")
.setTabListener(new TabsListener(Tab3Fragment)));
}
}
public class TabsListener implements ActionBar.TabListener {
private Fragment frag;
// Called to create an instance of the listener when adding a new tab
public TabsListener(Fragment networksFragment) {
frag = networksFragment;
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.fragment_container, frag, null);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(frag);
}
}
public class ListFragment1 extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
getListView().setItemChecked(position, true);
ListFragment2 fragment2 = ListFragment2.newInstance(position);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, fragment2);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
고맙습니다. 이 문제를 해결하는 데 도움이 된 유일한 답변은 StackOverflow뿐입니다. –
저는 고용주의 의무가 없습니다. 그래서 필요한 모든 코드를 담은 요지를 만들었습니다 : https://gist.github.com/4619215 –