代码之家  ›  专栏  ›  技术社区  ›  amazingAdii

android保存和还原活动中使用的片段

  •  0
  • amazingAdii  · 技术社区  · 8 年前

    我有一个包含许多片段的主活动,现在让我们假设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;
    }
    

    }

    第一个片段包含一个按钮,当它被按下后,一个被片段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 回复  |  直到 8 年前
        1
  •  0
  •   Sohrab Alam    8 年前

    我假设你按下了按钮,第二个片段被添加,然后按下了后退按钮,当你回来的时候你得到了第一个片段,但是你希望是第二个片段。如果我是对的,那么你的代码应该是:

    如果(保存状态!=null){fragment=getsupportfragmentmanager().getfragment(savedinstancestate,“myfragment”);} if(fragment==null){fragment=newintro1();}

    剩下的都一样。