2012-06-18 144 views
1

我想要执行以下操作。有两个片段第一个和第二个。必须在它们之间进行转换。当我从第二个片段开始,首先存储在堆栈中。当我点击后退按钮时,第二个片段被移除并从堆栈中返回第一个片段。我再次无法进入第二个片段 - 它已被删除。我怎么解决这个问题?在两个片段之间切换

在主要活动(回调片段1):我动态添加

@Override 
public void onNavigate() { 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    Fragment1 newFragment1 = (Fragment1) getFragmentManager().findFragmentByTag("frag_1"); 
    Fragment2 newFragment2 = (Fragment2) getFragmentManager().findFragmentByTag("frag_2"); 
    ft.replace(R.id.main, newFragment2); 
    ft.remove(newFragment1); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

片段:

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.add(R.id.main, new Fragment1(), "frag_1"); 
    ft.add(R.id.main, new Fragment2(), "frag_2"); 
    ft.commit(); 
+0

为什么你叫ft.remove(newFragment1);如果你已经取代它,并已被删除了? –

+0

只是为了:)但问题是按下Back键时破坏片段2。 – Vladimir

+0

你想在单击返回按钮后访问Fragment2对象吗? –

回答

0

我解决了这个问题:)。我隐藏第一个片段并将事务添加到后端堆栈。当我点击按钮返回我回到片段

@Override 
public void onNavigate() { 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    Fragment1 newFragment1 = (Fragment1) getFragmentManager().findFragmentByTag("frag_1"); 
    ft.hide(newFragment1); 
    ft.addToBackStack(null); 
    ft.commit(); 
}