使按钮阵列不可见(提示)

时间:2015-04-15 09:49:58

标签: java android arrays function button

我想制作一个提示按钮,所以当我点击它时,我想从列表中删除两个按钮(答案列表)。现在我不知道该怎么做,请在按钮阵列上进行for循环,这样我就可以使这个按钮不可见了。

public class ClassicMode extends Activity {//מהמשחק עצמו

    String pic;//תמונה של הדגל
    Button answer1;//תשובות
    Button answer2;
    Button answer3;
    Button answer4;
    Button hint;
    TextView guess;
    TextView numOfGuess;
    TextView score;
    TextView scorenum;
    DatabaseHandler db = new DatabaseHandler(this);
    String fn;
    Guesses G;
    Bitmap bm;
    Score s;
    Button [] b = new Button[4];

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        score =(TextView)findViewById(R.id.score);
        scorenum =(TextView)findViewById(R.id.scorenum);
        scorenum.setText(String.valueOf(s.score));
        guess =(TextView)findViewById(R.id.guesses);
        numOfGuess=(TextView)findViewById(R.id.numOfGuesses);
        numOfGuess.setText(String.valueOf(Guesses.numOfGuesses));
        hint =(Button)findViewById(R.id.hint);

        Flags f = new Flags();
        Random r = new Random();//הדגל שיבחר לשאלה
        int num = r.nextInt(160);//Up

        f = db.getFlag(num);//הצגת הדגל הרנדומלי שיצא
        fn = f.getName().toString();
        pic = f.getImage().toString();
        pic_view(pic);//מעבר לפונקציה להשמת התמונה של הדגל במשחק

        //מערך ארבע כפתורים כנגד ארבע תשובות

        b[0] = (Button)findViewById(R.id.button1);
        b[1] = (Button)findViewById(R.id.button2);
        b[2] = (Button)findViewById(R.id.button3);
        b[3] = (Button)findViewById(R.id.button4);

        List<String>Answers=new ArrayList<String>();//מערך תשובות
        Answers.add(f.getName().toString());//הוספת התשובה הנכונה
        for(int i=1;i<4;i++)
        {
            num = r.nextInt(200);
            String valToAdd1 = db.getFlag(num).getName().toString();
            if(!Answers.contains(valToAdd1)){
                Answers.add(valToAdd1);
            }

        }

        /*num = r.nextInt(30);
        Answers.add(db.getFlag(num).getName().toString());//הוספת 3 תשובות רנדומליות
        num = r.nextInt(30);
        Answers.add(db.getFlag(num).getName().toString());
        num = r.nextInt(30);
        Answers.add(db.getFlag(num).getName().toString());*/

        Collections.shuffle(Answers);//ערבוב התשובות

        for(int i=0;i<Answers.size();i++)
        {
            b[i].setText(Answers.get(i));//השמת התשובות מהמהערך למערך הכפתורים
        }
    }//end of OnCreat 

现在我做了什么(有check函数,检查你是否正确回答了以及我不知道怎么做的提示):

    public void check(View v)
    {
        Log.d("yes", fn);
        Button b = (Button)v;
        String text = b.getText().toString();
        if(text.equals(fn))
        {
            s.score+=5;
            resetQuiz();
        }
        else
        {
            s.score-=5;
            if(Guesses.numOfGuesses==1)
            {
                G.setNumOfGuesses(3);
                finish();//כאשר מספר הניחושים
                return;
            }
            Guesses.numOfGuesses--;
            numOfGuess.setText(String.valueOf(Guesses.numOfGuesses));
        }

    }

    public void hint(View v)
    {
        G.numOfGuesses--;
        for(int i=0;i<2;i++)
            for(int j=0;j<4;j++)
            {
                if()
            }
    }

1 个答案:

答案 0 :(得分:0)

注意:这是{大多数}伪代码

我建议保留两个单独的答案列表。您的Flag对象已经包含正确的答案。您需要一个列表来跟踪错误的答案(因此我们不必每次都循环并检查每个项目)。您还需要一个可以随机播放和显示的列表。

我采取了一些自由使你的变量名更长,所以它们更清晰。

onCreate() {
    ...
    btnHint.setOnClickListener(hintOnClickListener);
    ...
    Flag f = db.getFlag(randomNum); // This is the real question & answer
    List<String> wrongAnswers = new ArrayList<String>(3);
    List<String> allAnswers = new ArrayList<String>(4);

    // Loop 3 times for 3 random wrong answers
    for (int i=0; i<=3; i++) {
       randNum = r.nextInt(200);
       String randWrongAnswer = db.getFlag(randNum).getName().toString();
       if (! wrongAnswers.contains(randWrongAnswer)) {
           wrongAnswers.add(randWrongAnswer);
       }
    }

    allAnswers.add(f.getName().toString());
    allAnswers.addAll(wrongAnswers);
    Collection.shuffle(allAnswers);
    ...
}

我喜欢在代码中进一步单独声明所有听众,以保持OnCreate方法清晰易读。

private OnClickListener hintOnClickListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        G.numOfGuesses--;

        // Since you shuffled the 'allAnswers' before displaying to the screen, 
        // we can just pick the first 2 answers from wrongAnswers list
        // and it will appear to be random to the user.
        for (int i=0; i < buttons.length; i++) {
            String buttonText = buttons[i].getText().toString();

            if (buttonText.equals(wrongAnswers.get(0))
                || buttonText.equals(wrongAnswers.get(1))) {
               buttons[i].setVisibility(View.INVISIBLE);
            }
        }
    }
};

编辑:根据OP的评论添加提示逻辑。

相关问题