2015-04-15 2 views
0

Я хочу сделать кнопку подсказки, поэтому, когда я нажимаю на нее, я хочу удалить две кнопки из списка (список ответов). Теперь я не знаю, как это сделать, ho w, чтобы сделать цикл for в массиве кнопок, поэтому я могу сделать эти кнопки невидимыми.Make Button Array Invisible (Сделать подсказку)

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() 
      } 
    } 
+0

Вау, комментарии на иврите. Разве ваша IDE не страдает от RTL? –

ответ

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 в.

+0

, но сначала мне нужно сравнить тексты с именем флага, которое является fn - if (text.equals (fn)) – adids1221

+0

это решение работает для вас? – beyondtheteal

+0

Да, это большое спасибо – adids1221