我想在操作栏上添加一个回家按钮,当我的活动有两个片段时:
但它似乎没有将我的第一个片段添加到堆栈中,因为我得到了“count entry:0”的日志
public class LoginActivity extends FragmentActivity {
private static android.support.v4.app.FragmentManager fm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
Fragment fragment = this;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_login,
container, false);
TextView tv = (TextView) rootView.findViewById(R.id.signUpText1);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentTransaction ft = getFragmentManager()
.beginTransaction();
ft.hide(fragment);
ft.add(R.id.container, new SignupFragment());
ft.addToBackStack(null);
ft.commit();
}
});
return rootView;
}
}
public static class SignupFragment extends Fragment {
public SignupFragment() {
// TODO Auto-generated constructor stub
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View signupView = inflater.inflate(R.layout.fragment_signup,
container, false);
ActionBar ab = getActivity().getActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
ab.setDisplayHomeAsUpEnabled(true);
ab.setDisplayShowHomeEnabled(true);
return signupView;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
fm = getSupportFragmentManager();
Log.e("LoginActivity", "count entry:" + fm.getBackStackEntryCount());
if (fm.getBackStackEntryCount() > 0) {
// fm.popBackStack();
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
如何正确地将片段添加到后栈(是否可能?) 谢谢你,抱歉新手问题。
答案 0 :(得分:0)
您能否澄清一下您的碎片路径? 从你的问题我明白你有PlaceholderFragment,然后你从那里转到SignupFragment?对? 由于您的第一个片段(PlaceholderFragment)以这种方式初始化
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
我认为你不要将这个片段添加到后台堆栈,所以后台堆栈是空的。替换为。
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.addToBackStack("optionalName").commit();
}
我认为应该解决它。
编辑:
switch (item.getItemId()) {
case android.R.id.home:
fm = getSupportFragmentManager();
Log.e("LoginActivity", "count entry:" + fm.getBackStackEntryCount());
if (fm.getBackStackEntryCount() > 0) {
// fm.popBackStack();
}
break;
在这里你使用的是SupportFragmentManager,你在使用FragmentManager,这些是不同的,不能混合,你坚持使用其中任何一个。如果你想支持api 11以下的低api设备,请使用SupportFragmentManager,如果不坚持FragmentManager。
由于您将两个片段添加到FragmentManager,因此SupportFragmentManager后台堆栈仍为空。
最好的问候