Android |保存并恢复活动

时间:2018-05-31 17:56:00

标签: android android-studio android-fragments

我有一个主要活动,其中包含许多片段让我们现在假设2个活动A和B这里是代码

  

简介活动

public class introductionActivity extends AppCompatActivity implements View.OnClickListener {


private static String TAG = "MyActivity";
private static Fragment fragment ;
public static android.support.v4.app.FragmentManager fragmentManager;
public static android.support.v4.app.FragmentTransaction fragmentTransaction;


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

    if(savedInstanceState != null){
        fragment = getSupportFragmentManager().getFragment(savedInstanceState, "MyFragment");
    }

        fragment = new intro1();
        fragmentManager = getSupportFragmentManager();
        fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.fragment_container, fragment);
        fragmentTransaction.commit();

    ActionBar actionbar = getSupportActionBar();


}


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    getSupportFragmentManager().putFragment(outState, " MyFragment", fragment);
}

@Override
public void onClick(View v) {

}

public static void doStuff(){
    fragment = new intro2();
    fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, fragment);
    fragmentTransaction.commit();
}

}

简介活动(MainActivity)包含FrameLayout,它将被第一个片段替换。

  

片段1

public class intro1 extends Fragment{

private View rootView;
public static Activity intro1Activity;
public  Button intro1nxtButton;



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

    intro1nxtButton = (Button)rootView.findViewById(R.id.intro1Next_button);

    intro1nxtButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            introductionActivity.doStuff();
        }
    });

    // Inflate the layout for this fragment
    return rootView;
}

}

第一个片段包含一个按钮,在按下后,片段1被片段2替换

  

片段2

public class intro2 extends Fragment {

private View rootView;
public static Activity intro2Activity;

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

    // Inflate the layout for this fragment
    return rootView;
}

}

我想要的是当我按下后退按钮或关闭介绍活动并重新打开它时它应该恢复片段2而不是片段1

1 个答案:

答案 0 :(得分:0)

我假设您已经按下了按钮和intro2,即添加了第二个片段,然后按下后退按钮,当你回来时你得到intro1,但是你希望intro2。如果我是正确的那么你的代码应该是:

if(savedInstanceState!= null){fragment = getSupportFragmentManager()。getFragment(savedInstanceState," MyFragment");} If(fragment == null){fragment = newintro1(); }

休息将是一样的。