2014-02-14 22 views
0

我想在啓動MainAcitivity時在我的framelayout中打開一個隨機片段。如何在onCreate中打開一個隨機片段進行活動?

問題:

  1. 我如何random1值轉換爲一個片段?
  2. 當按下屏幕上的按鈕時,刷新視圖以獲取另一個隨機片段是否很困難?

    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; 
         } 
        } 
    } 
    

回答

1

問題是隨機:用於三個片段之間隨機選擇的非常小的參數。這段代碼可以幫助你。請setRandomFragment()插入:

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

更新2: 五年片段

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; 
      } 
+0

我希望對你有所幫助 祝好!Andrew Prayzner –

+1

非常感謝!它的工作原理與我想要的完全一樣! :D – johgru

+0

嗯...我不明白如何使這個代碼更多的片段,如5? – johgru

0

這是一個例子:

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; 
    } 

我使用的方法來加載我的片段:

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()); 
    }  
} 
+0

setMyFragment在開關給我的錯誤。我真的很陌生,爲什麼會發生這種情況? – johgru

1

簡單溶液(UPDATE 2)。如果使用2個隨機片段必須在random.getInt()值100集,如果三個片段 - 150,四 - 200 ...並添加塊的if-else邏輯選擇片段:

/** 
    * 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; 
       } 
      } 
     } 
+0

我不能讓它工作,因爲我的類擴展了ActionBarAcitivity,而不是FragmentActivity。 – johgru

+0

要在您的活動中使用片段,您的類必須擴展FragmentActivity –

+0

如果您使用的是v7 appcompat庫,則您的活動應該擴展ActionBarActivity,它是FragmentActivity的子類(有關更多信息,請參閱添加操作欄)。 (來自Android開發者網站) http://developer.android.com/training/basics/fragments/creating.html –

相關問題