2014-01-09 117 views
37

我試圖在片段之間進行導航。我有NewFragment.java與新的片段工作。我的問題是:我如何打開另一個片段的新片段

我如何使這個onClickListener正確運行NewFragment.java?

button.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 

     Intent i = new Intent(getActivity(), NewFragment.class); 
     startActivity(i); 

     }}); 

供參考:這是從一個片段(我不知道是否重要)。

回答

79

添加按照點擊監聽功能代碼,

 NextFragment nextFrag= new NextFragment(); 
    getActivity().getSupportFragmentManager().beginTransaction() 
    .replace(R.id.Layout_container, nextFrag,"findThisFragment") 
    .addToBackStack(null) 
    .commit(); 
+0

你對TAG_FRAGMENT的含義是什麼?謝謝。 – FilipeOS

+0

@FilipeOS TAG_FRAGMENT可以幫助你在以後找到它的片段 – whalemare

+3

我不認爲你可以在片段中使用「this」。而是使用getActivity()。getFrag ...由於OP詢問「來自另一個片段的開放片段」 – Alex

2

您應該在活動內部創建一個函數來打開新的片段並將活動引用傳遞給片段,並在片段內的某個事件中調用此函數。

+2

從片段中可以自動已具備父活動的參考。使用getActivity()或者如果使用onAttach,則活動位於參數中。 – miva2

1
@Override 
public void onListItemClick(ListView l, View v, int pos, long id) { 
    super.onListItemClick(l, v, pos, id); 
    UserResult nextFrag= new UserResult(); 
    this.getFragmentManager().beginTransaction() 
    .replace(R.id.content_frame, nextFrag, null) 
    .addToBackStack(null) 
    .commit(); 
} 
5

這更說明@納倫德拉代碼代碼,

首先,你需要第二個片段的一個實例。然後你應該有FragmentManager和FragmentTransaction的對象。完整的代碼如下,

Fragment2 fragment2=new Fragment2(); 
FragmentManager fragmentManager=getActivity().getFragmentManager(); 
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.content_main,fragment2,"tag"); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 

希望這會起作用。有時你可能會得到getSupportFragmentManager()而不是getFragmentManager()。

0

使用此,

  AppCompatActivity activity = (AppCompatActivity) view.getContext(); 
      Fragment myFragment = new MyFragment(); 
      activity.getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment).addToBackStack(null).commit(); 
相關問題