2012-12-02 193 views
0

我想在选择listFragment A项目后用片段B2替换片段B1。替换片段

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 

    Integer Position = position; 
    WebViewerFragment fragment = (WebViewerFragment) getFragmentManager() 
      .findFragmentById(R.id.detailFragment); 
    if (Position.equals(0)) { 
     FragmentManager fm = getFragmentManager(); 
     WebViewerFragment newFragment = new WebViewerFragment(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.detailFragment, newFragment); 
     ft.addToBackStack("android"); 
     ft.commit(); 
    } else if (Position.equals(1)) { 
     FragmentManager fms = getFragmentManager(); 
     WebViewerFragment_II newFragments = new WebViewerFragment_II(); 
     FragmentTransaction fts = fms.beginTransaction(); 
     fts.replace(R.id.detailFragment, newFragments); 
     fts.addToBackStack("google"); 

     fts.commit(); 
    } 
} 

它只是替换一次,选择项目1(位置0)后,应用程序崩溃。

+0

请发送异常的堆栈跟踪。 – yDelouis

回答

0

当您调用FragmentTransaction的方法replace(int, Fragment)时,int必须是要在其中放置新的Fragment的容器的标识,并且其中前一个为。通常,这是一个FrameLayout
您无法替换已使用XML设置的Fragment

+0

谢谢。现在应用程序不会崩溃,但addTobackStacK不起作用。当我将'ft.replace'改为'ft.add'时,它也可以工作。为什么? –

+0

我认为这是一个堆栈,当你点击后面时,你会删除顶部的片段。所以,如果你调用replace,你会删除这个片段,并且什么都不会保留。如果您调用add,则删除最后一个片段,然后出现下面的片段。 – yDelouis