Передача списка массивов правильно и установка оценки для каждого члена списка массивов - PullRequest
0 голосов
/ 24 апреля 2011

Всем, кто помог мне с другими моими вопросами, спасибо.У меня это почти получилось, но две последние проблемы мешают ему работать так, как я хочу.

Эти два класса должны работать следующим образом.1-й класс получает имена людей, которые хотят играть в игру.Использует тот же EditText, и когда они вводят свое имя, они нажимают кнопку отправить.Когда все имена представлены, они нажимают кнопку «Готово / игра», которая отправляет их и их данные (сколько игроков и имен) в следующий класс.В классе 1 я считаю, что ошибка заключается в кнопке отправки.Я пытаюсь добавить все имена в список массивов, и я не верю, что он делает это правильно.Когда я запускаю приложение, оно хорошо воспринимает имена с точки зрения пользователей.Но на следующем экране он должен отобразить их имя: (он говорит, что ноль, поэтому он не получает имена правильно) и задачу для выполнения (что он делает правильно).

Последнее, что нужно сделать, - это заняться во втором классе, чтобы эти кнопки (неудачные, победные и не плохие) нужно было нажимать только один раз (тогда это ставит оценку названиючеловек, который в свою очередь это было), а затем он должен начать следующий человек и задачи.(Это не атм).Я был бы очень признателен за помощь в получении этой проклятой вещи.Спасибо всем, кто нашел время, чтобы ответить.И извините, если вам надоело видеть мои запросы о помощи.

Класс 1

public class Class1 extends Activity
{
    int players=0, i=0;
    String names[];

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.class1);

        final EditText input = (EditText) findViewById(R.id.nameinput);

        final ArrayList<String> names = new ArrayList<String>();
        //names = new String[players];

        Button submitButton = (Button) findViewById(R.id.submit_btn);
        submitButton.setOnClickListener(new View.OnClickListener()
        {
             public void onClick(View submit1)
             {
                //for( i=i; i < players; i++)
                //{
                    players++;
                    names.add(input.getText().toString());
                    //names[i] = input.getText().toString();
                    input.setText("");
                //}
             }
        });

        Button doneButton = (Button) findViewById(R.id.done_btn);
        doneButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View done1)
            {
                Intent done = new Intent(Class1.this, Game.class);
                Bundle bundle = new Bundle();
                bundle.putStringArrayList("arrayKey", names);

                done.putExtra("players", players);
                //done.putExtra("names", names[players]);
                startActivity(done);
            }
        });
    }

Игровой класс

public class Game extends Activity
{
    int players, counter=0, score, ptasks,rindex;
    String[] names;
    String[] tasks;
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);

        Bundle bundle = this.getIntent().getExtras();
        String[] names = bundle.getStringArray("arrayKey");

        Intent game = getIntent();
        players = game.getIntExtra("players", 1);
        //names = game.getStringArrayExtra("names");

        Random generator = new Random();

        tasks = new String[10];
        tasks[0]= "";
        tasks[1]= "";
        tasks[2]= "";
        tasks[3]= "";
        tasks[4]= "";
        tasks[5]= "";
        tasks[6]= "";
        tasks[7]= "";
        tasks[8]= "";
        tasks[9]= "";

        names = new String[players];

        while (counter <5)
        {
            for (int i = 0; i < players; i++)
            {
                TextView name1 = (TextView) findViewById(R.id.pname);
                name1.setText( names[i]+":");

                ptasks = 10;
                rindex = generator.nextInt(ptasks);

                TextView task = (TextView) findViewById(R.id.task);
                task.setText( tasks[rindex]);

                Button failButton = (Button) findViewById(R.id.fail_btn);
                failButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View failed)
                    {
                        return;
                    }
                });

                Button notButton = (Button) findViewById(R.id.notbad_btn);
                notButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View notbad)
                    {
                        return;
                    }
                });

                Button champButton = (Button) findViewById(R.id.champ_btn);
                champButton.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View champp)
                    {
                        return;
                    }
                });

            }

            counter++;
        }
    }
}

В качестве примечания.Вещи, которые вы видите в тех разделах, которые имеют // комментарии рядом с ними, я имею там, потому что я проверял между теми и теми, которые не были закомментированы, и ни один не работал.Если у вас есть какие-либо замечания по исправлению этого, я ценю это.

1 Ответ

0 голосов
/ 25 апреля 2011

Я вижу две проблемы с вашим кодом, которые могут объяснить, почему вы получаете null для вашего списка игроков во втором Activity:

  1. В Game, String[] names = bundle.getStringArray("arrayKey"); должно быть

    ArrayList<String> names = bundle.getStringArrayList("arrayKey");`
    
  2. В Class1 вы помещаете ArrayList в Bundle (bundle.putStringArrayList("arrayKey", names);), что бессмысленно, поскольку bundle не идетгде.Вместо этого вы должны поместить его в Intent:

    done.putStringListExtra("arrayKey", names);
    

Обратите внимание, что ваш код еще более запутан, потому что у вас есть и String [] с именем names иArrayList назван names в разных областях.Выберите один (я бы порекомендовал List) и избавьтесь от другого.

Кроме того, в Game это не нужно:

Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");

Intent game = getIntent();
players = game.getIntExtra("players", 1);

У вас уже естьbundle как раз перед этим, так что вы могли бы также сделать:

Bundle bundle = this.getIntent().getExtras();
String[] names = bundle.getStringArray("arrayKey");
players = bundle.getInt("players", 1);

Основная концепция состоит в том, что из действия вызова вы помещаете информацию в и Intent, используя различныеputExtra() и putExtraXXX() методы.В операции , называемой , вы получаете информацию, которую вы поместили в Intent, либо

  • , получая Bundle * от * the Intent через getExtras(), а затем вводить все, используя различные методы get() для Bundle ( not * Intent).
  • , непосредственно вызывающего getExtraXXX()методы на Intent.

Во второй части, поскольку ваш код в настоящее время стоит, он просто собирается сразу зациклить всех игроков (всего 5 раз, я непонять цель counter).

Вместо этого вам следует выполнять всю вашу обработку (вычисление счета для текущего игрока, увеличение значения индекса игрока, установка следующей задачи и т. д.)только когда нажата одна из 3 кнопок.Если это будет долгосрочное задание, вы можете отключить кнопки до завершения, чтобы выполнить требование о разрешении нажатия только одной кнопки на игрока.Снова включите кнопки, когда следующий игрок будет готов.

У меня нет энергии, чтобы произвести все, что вам нужно, но в начальной точке превратите это:

public void onCreate(Bundle savedInstanceState)
{
    //...other code here
    while (counter <5)
    {
        for (int i = 0; i < players; i++)
        {
            TextView name1 = (TextView) findViewById(R.id.pname);
            name1.setText( names[i]+":");

            ptasks = 10;
            rindex = generator.nextInt(ptasks);

            TextView task = (TextView) findViewById(R.id.task);
            task.setText( tasks[rindex]);

            Button failButton = (Button) findViewById(R.id.fail_btn);
            failButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View failed)
                {
                    return;
                }
            });

            Button notButton = (Button) findViewById(R.id.notbad_btn);
            notButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View notbad)
                {
                    return;
                }
            });

            Button champButton = (Button) findViewById(R.id.champ_btn);
            champButton.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View champp)
                {
                    return;
                }
            });

        }

        counter++;
    }
    //...other code here
}

в

public void onCreate(Bundle savedInstanceState)
{
    //...other code here
    int i = 0;
    TextView name1 = (TextView) findViewById(R.id.pname);
    TextView task = (TextView) findViewById(R.id.task);        

    Button failButton = (Button) findViewById(R.id.fail_btn);
    failButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View failed)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });

    Button notButton = (Button) findViewById(R.id.notbad_btn);
    notButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View notbad)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });

    Button champButton = (Button) findViewById(R.id.champ_btn);
    champButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View champp)
        {
            //do what must be done for the current player, calculate score, etc
            prepareNextPlayer(++i, names, name1, task);
        }
    });
    //...other code here
}

private void prepareNextPlayer(int i, ArrayList<String> names, String [] tasks, TextView nameField, TextView taskField)
{
        if(i >= names.size())
        {
            //all players have been processed, what happens now?
            return;
        }

        int rindex = generator.nextInt(10);
        nameField.setText( names.get(i)+":");
        task.setText( tasks[rindex]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...