I want to open a random fragment in my framelayout when I start MainAcitivity.
Questions:
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.