【问题标题】:cant randomly set a new button with java不能用java随机设置一个新按钮
【发布时间】:2012-03-18 17:34:14
【问题描述】:

我正在尝试让我的按钮更改为不同的图片和一组不同的法律 这是我目前正在使用的字母应用程序,并且在市场上......我想让它随机更改图片,然后在整个程序中按照字母表进行操作,但我不知道如何让按钮随机化所以这是我正在使用的基本代码

包 com.alphafree;

import java.util.Random;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;

public class letterA extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        int[] _26Num = new int[6];
        int i, number;

        Random r1 = new Random(); // Random generator
        for (i = 1; i < _26Num.length; i++) { // Pick 6 Random Numbers
            do {
                number = (int) (r1.nextDouble() * 26);
                _26Num[1] = 1;
            } while (!(number != 0 && number != _26Num[1]
                    && number != _26Num[2] && number != _26Num[3]
                    && number != _26Num[4] && number != _26Num[5]));
            _26Num[i] = number;
        }

        // defines the buttons
        View but1 = findViewById(R.id.let1);
        View but2 = findViewById(R.id.let2);
        View but3 = findViewById(R.id.let3);
        View but4 = findViewById(R.id.let4);
        View but5 = findViewById(R.id.let5);

        but1.setOnClickListener(this);
        but2.setOnClickListener(this);
        but3.setOnClickListener(this);
        but4.setOnClickListener(this);
        but5.setOnClickListener(this);

        // set the random content view
        int random = (int) Math.ceil(Math.random() * 5);
        if (random == 1) {
            setContentView(R.layout.letter1a);

        } else if (random == 2) {
            setContentView(R.layout.letter1a);

        } else if (random == 3) {
            setContentView(R.layout.letter1a);

        } else if (random == 4) {
            setContentView(R.layout.letter1a);

        } else if (random == 5) {
            setContentView(R.layout.letter1a);

        }

        // here is were i need to set up the buttons
        if (_26Num[1] == 1) {

            let1.setBackgroundResource(R.drawable.let_a);

        } else if (_26Num[1] == 2) {
            setContentView(R.layout.letter1a);

        } 


    }

    public void onClick(View v) {

        if (mp != null)
            mp.release();

        switch (v.getId()) {

        case R.id.let1:

            mp = MediaPlayer.create(this, R.raw.correct);
            {
                new AlertDialog.Builder(this)
                        .setTitle("Y A Y!!!!   Y O U R    R I G H T")
                        .setMessage(
                                "Thats the letter      'A'                  You Chose Correct")
                        .setNeutralButton("Done", null).show();
                startActivity(new Intent("com.alphafree.LETTERB"));

            }
            break;

        }
        mp.seekTo(0);
        mp.start();
    }

}

【问题讨论】:

    标签: java android button random imagebutton


    【解决方案1】:

    你可以这样做:

    private static final int[] num2DrawableMap = new int[] {
        R.drawable.letterA,
        R.drawable.letterB,
        // etc
    };
    
    private static final int[] num2LayoutMap = new int[] {
        R.layout.layoutA,
        R.layout.layoutB,
        // etc
    };
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        int[] _26Num = new int[6];
        int i, number;
    
        Random r1 = new Random(); // Random generator
        for (i = 1; i < _26Num.length; i++) { // Pick 6 Random Numbers
            do {
                // don't you like r1.nextInt(26) ?
                number = (int) (r1.nextDouble() * 26);
                // always 1? why in that loop?
                _26Num[1] = 1;
            } while (!(number != 0 && number != _26Num[1]
                    && number != _26Num[2] && number != _26Num[3]
                    && number != _26Num[4] && number != _26Num[5]));
            _26Num[i] = number;
        }
    
        // set the random content view
        int random = r1.nextInt(num2LayoutMap.size);
        setContentView(num2LayoutMap[random]);
    
        // find the buttons
        View[] buts = new View[5];
        buts[0] = findViewById(R.id.let1);
        buts[1] = findViewById(R.id.let2);
        buts[2] = findViewById(R.id.let3);
        buts[3] = findViewById(R.id.let4);
        buts[4] = findViewById(R.id.let5);
    
        for (View but : buts) {
            but.setOnClickListener(this);
            int drawableId = num2DrawableMap[_26Num[i]];
            but.setBackgroundResource(drawableId);
        }
    }
    

    但是:按钮必须在您的每个 layout.xml 文件中,并且它们需要具有相同的 id。否则你找不到他们。另外你需要setContentView()才能使用findViewById()

    【讨论】:

    • 天哪,谢谢......所以我可以设置一个视图,然后只要它在一切完成之前完成就可以重新定义它吗?
    • 你应该在onCreateonDestroy之间只使用一次setContentView()如果你想动态切换布局你可以设置一个空的FrameLayout作为内容并动态添加/删除你的布局(甚至只是显示/隐藏它们)。或者使用不同的活动。
    • 哦哇......我没有意识到你可以这样做......谢谢你:)......你们都是一个巨大的帮助:)跨度>
    【解决方案2】:

    除了每次都设置内容视图之外,您可以一次添加所有内容并保持它们对 GONE 的可见性。无论您想显示什么按钮,都可以使其可见。如果您想更改将 Previous 更改为 GONE 并让新的 VISIBLE。

    【讨论】:

    • 不 :(.....我唯一能做的就是让按钮变成 chang 是开始一个新的活动 :( 它只是让程序比它必须是
    猜你喜欢
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多