2015-04-17 4 views
3

Я создаю приложение для викторины с Android Studio. У меня есть активность и PagerAdapter. В PagerAdapter есть три фрагмента. Когда я запускаю приложение, фрагменты отображаются в порядке: фрагмент1, фрагмент2, фрагмент3.Как показать фрагменты случайным образом?

Я хочу, чтобы они отображались случайным образом в разных положениях при каждом запуске приложения. Например: fragment3, fragment1, FRAGMENT2 ...

Деятельность, которая имеет PagerAdapter в нем:

public class testActivity extends FragmentActivity { 

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

    private void initialisePaging() { 
     List<Fragment> fragments = new Vector<Fragment>(); 
     fragments.add(Fragment.instantiate(this,fragment1.class.getName())); 
     fragments.add(Fragment.instantiate(this,fragment2.class.getName())); 
     fragments.add(Fragment.instantiate(this,fragment3.class.getName())); 
     PagerAdapter mPagerAdapter = new PagerAdapter(this.getSupportFragmentManager(), fragments); 

     ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
     pager.setAdapter(mPagerAdapter); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_test, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

} 

PagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter { 

    private List<Fragment> fragments; 

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     return this.fragments.get(arg0); 
    } 

    @Override 
    public int getCount() { 
     return this.fragments.size(); 
    } 

    public void setFragments(List<Fragment> fragments) { 
     this.fragments = fragments; 
    } 
} 

ответ

3

Просто перетасовать список перед передачей его на адаптер.

private void initialisePaging() { 
    List<Fragment> fragments = new Vector<Fragment>(); 
    fragments.add(Fragment.instantiate(this,fragment1.class.getName())); 
    fragments.add(Fragment.instantiate(this,fragment2.class.getName())); 
    fragments.add(Fragment.instantiate(this,fragment3.class.getName())); 

    //add this line 
    Collections.shuffle(fragments , new Random(System.nanoTime())); 

    PagerAdapter mPagerAdapter = new PagerAdapter(this.getSupportFragmentManager(), fragments); 

    ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
    pager.setAdapter(mPagerAdapter); 

} 
+1

Это работало очень хорошо. Спасибо! – Kaspis245

-1

Не уверен, если это может помочь, но попробовать что-то вроде этого

Random rand = new Random(); 

int n = rand.nextInt(50) + 1; 
\\50 is the maximum and the 1 is our minimum 

Затем вы можете использовать t он ИНТ либо получить/сгенерировать имя, которое вы хотели бы получить доступ, может быть, даже положить фрагменты в массив и получить доступ к массиву, используя Int (п) в качестве индекса

0
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) { 
     super(fm); 
     this.fragments = fragments; 
     long seed = System.nanoTime(); 
     //shuffle the fragment list 
     Collections.shuffle(fragments , new Random(seed)); 
}