Android:从片段支持后,活动无效

时间:2015-03-11 14:59:04

标签: android android-activity android-fragments

我有像WelcomeActivity这样的活动和像GuideFragment这样的片段。 我在WelcomeActivity中有一个按钮,导致导航到GuideFragment。此外,我在GuideFragment中有一个按钮,可以导航回WelcomeActivity。 第一次通过单击按钮进入GuideFragment,然后按btn_back返回WelcomeActivity。回到活动后,该按钮不再起作用了。 我的代码有什么问题? 活动分类:

 public class WelcomeActivity extends FragmentActivity 
{
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
GuideFragment guideFragment = new GuideFragment();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    guideFragment = new GuideFragment();
}
public void onGuideClick(View view)
{
    fragmentTransaction.replace(android.R.id.content, guideFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentManager.popBackStack();
    fragmentTransaction.commit();
}
}

和片段类:

 public class GuideFragment extends Fragment
{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // create ContextThemeWrapper from the original Activity Context with the custom theme
    Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.guideFrag);
    // clone the inflater using the ContextThemeWrapper
    LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
    // inflate the layout using the cloned inflater, not default inflater
    View view = inflater.inflate(R.layout.fragment_guide, container, false);
    Button button = (Button) view.findViewById(R.id.btn_back);
    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            getActivity().getFragmentManager ().popBackStack();
        }
    });
    return view;
}

}

由于

2 个答案:

答案 0 :(得分:1)

fragmentManager.popBackStack();移除onGuideClick(View view)。此外,交易不应是成员字段。

public void onGuideClick(View view) {
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(android.R.id.content, guideFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

你也可以启动GuideFragment两次,一次就够了。

答案 1 :(得分:0)

我改变了WelcomeActivity:

 public class WelcomeActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
}

public void onGuideClick(View view)
{
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    GuideFragment guideFragment = new GuideFragment();
    fragmentTransaction.replace(android.R.id.content, guideFragment);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

}