2015-10-19 38 views
0

我正在開發一個應用程序,在我的第一個活動中,我使用了tablayout和viewpager。所以當用戶改變選項卡片段也會改變。但問題出在第二個標籤上。在該選項卡中,我使用「容器」,因此,當用戶切換到此選項卡時,我添加了一個fragmentOne並且它有一個按鈕,當我單擊該按鈕時,我將該片段替換爲fragmentTwo。現在,在第二個片段中,我有一個textview,當我在該textview中單擊時,我想更改爲firstFragment。我認爲的麻煩是因爲兩者都有一個onActivityCreated並且屬於同一個活動。這是我的代碼。事件中的碎片事務中遇到的問題

Containerfragment:

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    RegistroUnoFragment registroUnoFragment = new RegistroUnoFragment(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.contenedorRegistro, registroUnoFragment).commit(); 
} 

這是我的第一個片段:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    btnContinuar = (Button)getView().findViewById(R.id.btnContinuar); 

    btnContinuar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RegistroDosFragment registroDosFragment = new RegistroDosFragment(); 
      android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.contenedorRegistro, registroDosFragment).commit(); 
     } 
    }); 

} 

,並在此片段時,我想回到我的第一個片段

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    tviRetroceder = (TextView)getView().findViewById(R.id.tviRetroceder); 
    tviRetroceder.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RegistroUnoFragment registroUnoFragment = new RegistroUnoFragment(); 
    android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.contenedorRegistro, registroUnoFragment).commit(); 
     } 
} 
+0

設置在文本視圖中的聽衆以及做裏面的更換工作。 – dex

+0

對不起,我忘記了那個代碼。但我真的那麼做 – Ato

回答

0

tviRetrocederOnClickListener創建一個新的RegsitroUnoFragmentregistroUnoFragment。但在您的容器活動的onCreate方法中已創建已存在 a RegistroUnoFragment存在名爲registroUnoFragment。您無法再創建它。你必須「找到」這個片段,然後將其添加到容器中。所以你需要檢查分段是否爲NULL。

使用「替換」而不是「添加」並使用標籤,以便您可以找到例如

fragmentTransaction.replace(R.id.contenedorRegistro,registroUnoFragment,"TagUno"); 

然後在onclick

RegistroUnoFragment registroUnoFragment=(RegistroUnoFragment) getActivity().getFragmentManager.FindFragmentByTag("TagUno"); 

if(registroUnoFragment!=null) { 
{fragmentTransaction.replace(R.id.contenedorRegistro,registroUnoFragment,"TagUno"); 
} 
+0

謝謝Abhinav – Kalininskaya