Функция с onClick () возвращает данные при следующем нажатии, но не при этом - PullRequest
0 голосов
/ 10 мая 2018

Я занимаюсь разработкой своего первого приложения, и я пытаюсь разработать такую ​​игру. У меня проблема с возвратом нужных данных из функции, содержащей onclick. ниже приведен код, который вызывает функцию для возврата строки task_tb_done.

name_win_player_ch_screen.setText(player2_name);
        name_lost_player_ch_screen.setText(player1_name);
        String challenge2= challenge_selector(task_type);
        task_tb_done.setText(player1_name+" "+challenge2);
        challenge2="";

и вот код, который обрабатывает этот запрос. Вызов, который назначается в условном цикле while, возвращается, но не сразу, как должно быть, а возвращает значение при следующем вызове этой части функции. Я думаю, что есть некоторая проблема с методами OnClik, потому что в других вариантах вызова я не использую onClicks, и они сразу дают мне идеальные значения.

 else if(task_type.equals("Truth or Dare")){


        firstplayer_screen.setVisibility(View.INVISIBLE);
        secondplayer_screen.setVisibility(View.INVISIBLE);
        game_screen_table.setVisibility(View.INVISIBLE);
        truth_or_dare_selection_screen.setVisibility(View.VISIBLE);

        //A pop up to ask Either they want a truth or dare
        //upon selection will give them task to do or to tell the truth.

        truth_select_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                truesize =  truth.length;

                int i = (int) (Math.random() * ((truesize - 0) + 1));
                if(i<=truesize) {
                    c=1;
                    toast.setText("Hey" + truth[i]);
                    toast.show();
                    challenge = truth[i];
                    truth_or_dare_selection_screen.setVisibility(View.INVISIBLE);
                }
                else{
                    challenge_selector(task_type);
                    toast.setText("Please Click again");
                    c=0;
                    toast.show();

                }
            }
        });
        dare_select_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                daresize =  dare.length;

                int i = (int) (Math.random() * ((daresize - 0) + 1));

                if(i<=truesize) {
                    c=1;

                    toast.setText("Hey" + dare[i]);
                    toast.show();
                    challenge = dare[i];
                    truth_or_dare_selection_screen.setVisibility(View.INVISIBLE);
                }
                else{
                    challenge_selector(task_type);
                    toast.setText("Please Click again");
                    c=0;
                    toast.show();
                }
            }
        });

        while (c==1) {
            c=0;
            truth_or_dare_selection_screen.setVisibility(View.INVISIBLE);
            return challenge;
        }

1 Ответ

0 голосов
/ 10 мая 2018

Каково значение переменной 'c' при первом запуске? Если это не 1, он не войдет в цикл while и не вернет вызов.

Если вы хотите оставаться в цикле while, пока пользователь не нажмет одну из кнопок, попробуйте следующее:

while (c != 1) {

}
return challenge;

Таким образом, он будет зацикливаться до тех пор, пока пользователь не нажмет (c = 1), затем цикл закончится, и вы достигнете «возврата».

Хотя вам следует рассмотреть возможность использования обратного вызова для такого поведения и установки OnClickListeners в вашем методе Activity onCreate.

...