【问题标题】:how to shuffle XML layouts如何打乱 XML 布局
【发布时间】:2014-01-03 09:38:20
【问题描述】:

我是在 Android 中开发应用程序的新手

当我点击Button时,如何随机更改当前活动Layout?我真的不知道如何以及从哪里开始编码

public class RandomSample extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button random = (Button) findViewById(R.id.button1);

    random.setOnClickListener(new View.OnClickListener() {
    int [] layouts = {R.layout.layout1, R.layout.layout2, R.layout.layout3};
    Random r = new Random();

        @Override
        public void onClick(View v) {
            setContentView(r.nextInt(layouts.length));
        }
    });
}
}

这就是我所做的,但注意到似乎完全有效

【问题讨论】:

  • @Onur A. 我试过你的代码,但似乎没有任何效果
  • 你应该为自己优化它我刚刚写了易于定制的虚拟代码
  • 我明白了。你能给我一些关于如何正确创建这种方法的指导或一些指示吗?谢谢。
  • 您发布的代码中有一个错误,我已在下面的答案中修复了该错误。
  • 在您的相关按钮 onclick 代码中,它应该是 setContentView(layouts[r.nextInt(layouts.length)]);在以前的版本中,您传递了一个随机数来运行;现在您可以访问该数组中的特定布局 ID

标签: android xml random-sample


【解决方案1】:

声明一个布局id数组,然后修改setContentView()

int[] layouts={R.layout.l1, R.layout.l2, R.layout.l3, R.layout.l4};
Random r=new Random();

在特定按钮的onClick() 方法中

setContentView(r.nextInt(layouts.length));

【讨论】:

    【解决方案2】:

    在你的活动中

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button btn=(Button) findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                          setContentView(R.layout.second);
                          }
                  });
            }
    

    【讨论】:

      【解决方案3】:

      映射到 R 类的每个 id 都是一个整数。因此,您可以使用 Random 类中的 nextInt() 方法来选择随机布局。

      试试这样的:

      int firstLayout = R.layout.l1; //your first layout
      int numberOfLayouts = 5; // the number of layouts that you have
      
      myButton.setOnClickListener(new OnClickListener() {
      
          public void onClick(View v) {
              Random r = new Random();
              setContentView(r.nextInt(numberOfLayouts) + firstLayout);
          }
      };
      

      【讨论】:

        【解决方案4】:

        您发布的问题是您试图将随机索引设置为内容视图,而不是其关联的布局。我在下面修改了你的代码。

        private static final int[] layouts = {R.layout.layout1, R.layout.layout2, R.layout.layout3};
        Random r = new Random();
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        
            Button random = (Button) findViewById(R.id.button1);
            random.setOnClickListener(new View.OnClickListener() {
        
                @Override
                public void onClick(View v) {
                    // This is just a number 0 - 2. It should not be set to content view.
                    int index = r.nextInt(layouts.length);
                    int nextLayout = layouts[index];
                    setContentView(nextLayout);
                }
            });
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-05
          • 1970-01-01
          • 2021-02-12
          相关资源
          最近更新 更多