【问题标题】:how to generate unrepeating random layouts如何生成不重复的随机布局
【发布时间】:2014-01-05 19:48:39
【问题描述】:
public class Music extends Activity {
    private int [] layouts = {
            R.layout.question_selector,
            R.layout.question_selector2,
            R.layout.question_selector3,
            R.layout.queston_selector4,
            R.layout.question_selector5,
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        int i = layouts.length;
        Random r = new Random();

        while (--i > 0) {
            int j = r.nextInt(i + 1);

            //swap values
            int temp = layouts[j];
            layouts[j] = layouts[i];
            layouts[i] = temp;

        }
        setContentView(layouts[i]);
    }
}

这是我到目前为止所做的:它工作得很好,但我注意到有时会一遍又一遍地显示某些布局。我想要的是,当我按下按钮并随机生成布局时,下次我再次按下按钮时,它不应该重复之前显示的布局。我怎么能做这样的事情?

【问题讨论】:

    标签: java android xml layout


    【解决方案1】:

    你可以创建一个arrayList 然后shuffle 它而不是一个带有随机数的数组,这将使它随机但每个项目只使用一次

    编辑,代码示例:

         ArrayList<int> mArrayList = new ArrayList<int>;
            //OR ArrayList<int> mArrayList = new ArrayList<int>(Arrays.asList(mOrdinaryArray));
         mArrayList.put(R.blabla.blabla);
         mArrayList.put(R.blabla.blablatwo);
         Collections.shuffle(mArrayList);
         Log.d(TAG, "output after shuffle: " + mArrayList);
    

    【讨论】:

    • 这意味着我应该将它声明为一个arrayList 而不是一个数组?然后我应该随机化arrayList?
    • 是的,所以不是数组,而是创建一个数组列表,然后调用Collections.shuffle(mArrayList),然后你可以从位置 0 遍历它,因为它已经被随机化了
    • 我尝试在 arrayList 中创建它,但是当我按下按钮时出现错误“强制关闭”。是否可以在 arrayList 中显示布局?
    • 不要再使用 Random 了,当你打乱列表时它是随机的,你可以用一个简单的 for 或 while 循环遍历每个位置,还记得在 arraylist 中它是mArrayList.get(i);跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2012-06-01
    • 1970-01-01
    • 2020-08-09
    • 2012-01-23
    相关资源
    最近更新 更多