java - 如何随机显示 fragment ?

标签 java android android-fragments

我正在使用 Android Studio 创建一个测验应用。我有一个 Activity 和 PagerAdapter 在里面。 PagerAdapter 中包含三个 fragment 。当我启动应用程序时, fragment 按顺序出现: fragment 1、 fragment 2、 fragment 3。

我希望它们在我每次启动应用程序时随机出现在不同的位置。例如:fragment3, fragment1, fragment2...

其中包含 PagerAdapter 的 Activity:

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

最佳答案

在将 fragment 列表传递给适配器之前,只需将 fragment 列表打乱。

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

}

关于java - 如何随机显示 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698643/

相关文章:

java - 如何检查字符串是 'float' 还是 'int'

android - onUpdate 的 appWidgetIds[] 中有哪些 ID?

安卓.view.InflateException : Binary XML file line #1: Error inflating class fragment

java - 使用 ViewPager 和 Fragments 时无法动态更改 textView 的文本

java - Android:未调用 MainActivity 中的 onResume

java - 如何为硬币翻转游戏设计 "machine learning"方法

java - 从多部分 HTTP 响应中提取多个 JSON 字符串

javascript - 不同网站上的不同用户代理

android - 从适配器中的 Assets 文件夹添加 SVG 图像

java - 使用我的自定义类对象填充多列 ListView - Android