2016-01-10 59 views
1

當我開始我的應用程序時,我的第一個片段被啓動。在那個片段中,我點擊一個按鈕,用一個新的片段代替原來的片段。當我點擊第二個片段時,它不會回到第一個片段,而是關閉應用程序並返回到手機的主屏幕。有人知道爲什麼嗎?回到以前的片段

這是在我的活動的onCreate方法推出了最初的片段:

public class Main extends AppCompatActivity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

     LoginFragment firstFragment = new LoginFragment(); 

     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.replace(R.id.content_frame, firstFragment); 
     ft.addToBackStack(null); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.commit(); 

    } 
}} 

以下是此片段的代碼,其中包含帶來了第二個片段按鈕:

public class LoginFragment extends Fragment implements View.OnClickListener { 
private FragmentTransaction ft; 
private Button registerButton; 

public LoginFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_login, container, false); 

    registerButton = (Button)view.findViewById(R.id.register_button); 
    registerButton.setOnClickListener(this); 

    return view; 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()){ 
     case R.id.register_button:{ 
      RegisterFragment registerFragment = new RegisterFragment(); 
      ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.content_frame, registerFragment); 
      ft.addToBackStack(null); 
      ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
      ft.commit(); 
      break; 
     } 
    } 
}} 

發佈的第二個片段現在不包含任何內容。無論如何,當我在第二片片段時,當我按下手機時,它不會回到我的第一個片段。

+0

據我所看到的,你忘了'實現集裝箱活動onBackPressed'方法。詳情請看這裏:http://stackoverflow.com/questions/26693754/fragment-addtobackstack-and-popbackstackimmediate-not-working – thetonrifles

+0

就是這樣!如果您想重新輸入,請接受您的答案。謝謝! –

回答

1

看來你只是忘了在實現集裝箱活動onBackPressed方法:

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0){ 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
}