简体   繁体   中英

How to open a random fragment in onCreate for activity?

I want to open a random fragment in my framelayout when I start MainAcitivity.

Questions:

  1. How do I convert the random1 value to a fragment?
  2. Is it difficult to "refresh" the view to get another randow fragment when pressing a button on the screen?

     public class Beginner extends ActionBarActivity { private SoundPool spool; public int soundID_R1; public int soundID_R5; public int soundID_R8; private Fragment_gehorINTbeginnerR1 intBegFragment_R1; private Fragment_gehorINTbeginnerR5 intBegFragment_R5; private Fragment_gehorINTbeginnerR8 intBegFragment_R8; private int randomFragmentNum; private FrameLayout container; private FragmentTransaction fragmentTransaction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_beginner); initUI(); } private void initUI() { container = (FrameLayout) findViewById(R.id.beginner_frame); fragmentTransaction = getSupportFragmentManager().beginTransaction(); setRandomFragment(); } private void setRandomFragment() { Random random = new Random(); randomFragmentNum = random.nextInt(2); //random choose fragment switch (randomFragmentNum) { case 0: { intBegFragment_R1 = new Fragment_gehorINTbeginnerR1(); fragmentTransaction.replace(R.id.beginner_frame, intBegFragment_R1); fragmentTransaction.commit(); break; } case 1: { intBegFragment_R5 = new Fragment_gehorINTbeginnerR5(); fragmentTransaction.replace(R.id.beginner_frame, intBegFragment_R5); fragmentTransaction.commit(); break; } case 2: { intBegFragment_R8 = new Fragment_gehorINTbeginnerR8(); fragmentTransaction.replace(R.id.beginner_frame, intBegFragment_R8); fragmentTransaction.commit(); break; } } } 

Simple solution (UPDATE 2). If use 2 random fragment you must set in random.getInt() value 100, if three fragment - 150, four - 200... And add blocks if-else for logic choose fragment:

 /**
     * Created by scijoker on 2/14/14.
     */
    public class TestRandomFragmentActivity extends FragmentActivity {
        private LoginFragment loginFragment;
        private SignUpFragment signUpFragment;
        private FragmentTransaction fragmentTransaction;

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

            initUI();
        }

        private void initUI() {
            fragmentTransaction = getSupportFragmentManager().openTransaction();
            setRandomFragment();
        }

        private void setRandomFragment() {
            Random random = new Random();
           int randomFragmentNum = random.nextInt(100);
        if (randomFragmentNum < 50) {
            randomFragmentNum = 0;
        } else{
            randomFragmentNum = 1;
        }
            //random choose fragment
            switch (randomFragmentNum) {
                case 0: {
                    loginFragment = new LoginFragment();
                    fragmentTransaction.add(R.id.fl_container, loginFragment);
                    fragmentTransaction.commit()
                    break;
                }
                case 1: {
                    signUpFragment = new SignUpFragment();
                    fragmentTransaction.add(R.id.fl_container, signUpFragment);
                    fragmentTransaction.commit()
                    break;
                }
            }
        }

Problem was in random: very small parameter for random choose between three fragment. This code help you. Please insert in setRandomFragment():

randomFragmentNum = random.nextInt(150);
        if (randomFragmentNum < 50) {
            randomFragmentNum = 0;
        } else if (randomFragmentNum < 100) {
            randomFragmentNum = 1;
        } else randomFragmentNum = 2;

UPDATE 2: For five fragments

randomFragmentNum = random.nextInt(250);
            if (randomFragmentNum < 50) {
                randomFragmentNum = 0;
            } else if (randomFragmentNum < 100) {
                randomFragmentNum = 1;
            } else if (randomFragmentNum < 150) {
                randomFragmentNum = 2;
            } else if (randomFragmentNum < 200) {
                randomFragmentNum = 3;
            } else 
                randomFragmentNum = 4;
            } 

This is an example:

   switch(random1.nextInt(3)){
        case 0:  setMyFragment(new Fragment_gehorINTbeginnerR1());
                 break;
        case 1: setMyFragment(new Fragment_gehorINTbeginnerR5());
                break;
        case 2: setMyFragment(new Fragment_gehorINTbeginnerR8());
                break;
    }

I use a method to load my fragments:

 public void setMyFragment(Fragment fr){
    try{
        FragmentManager fm = getSupportFragmentManager();
        if(fr != null){
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.Mainfragment, fr, null);
                            ft.commitAllowingStateLoss();
        }
    }catch(IllegalStateException e) {           
        Log.e(TAG, "ISE setting main view "+e.getMessage());
    }       
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM