EditText и использование кнопок для их отправки - PullRequest
0 голосов
/ 24 апреля 2011

Так что, в принципе, я бы хотел, чтобы пользователь мог вводить текст (свое имя).Затем нажмите кнопку отправки, которая сохранит это имя в массиве и сотрет запись в EditText (а также создаст счетчик для игроков).После того, как они закончат отправлять имена игроков, я хочу, чтобы они могли нажать на кнопку воспроизведения (я думаю, что она называется «Готово») и перейти на следующую страницу со всей отправляемой информацией.

Моя проблема в настоящее время заключается в том, что я ввожу имя и нажимаю на кнопку "Отправить, оно принудительно закрывается".Если я нажму кнопку воспроизведения, он закроется.Думаешь, ты сможешь мне помочь?Спасибо

Класс 1:

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

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

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


    Button submitButton = (Button) findViewById(R.id.submit_btn);
    submitButton.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View submit1)
        {
            players++;
            for(int i=0; i < players; i++)
            {
                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, Class2.class);
            done.putExtra("players", players);
            done.putExtra("names", names[players]);
            startActivity(done);
        }
    });
}

Ответы [ 4 ]

1 голос
/ 24 апреля 2011

Вы нигде не выделяете переменную names.Вам следует сделать следующее:

names = new String[NO_OF_PLAYERS];

Если вы не уверены в NO_OF_PLAYERS, используйте

ArrayList<String> names = new ArrayList<String>();

и используйте его:

names.add(input.getText().toString());
0 голосов
/ 25 апреля 2011

Пожалуйста, попробуйте этот отредактированный код,

  public class Class1 extends Activity
    {  
    static int players;
    static String names[];
    static  //this is called once when class is first time used.
   {
     players=-1;
   }

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

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


        Button submitButton = (Button) findViewById(R.id.submit_btn);
        submitButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View submit1)
            {
                players++;
                names[players] = 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, Class2.class);
                done.putExtra("players", players);
                done.putExtra("names", names[players]);
                startActivity(done);
            }
        });
    }
0 голосов
/ 24 апреля 2011

Ваша программа падает, потому что вы пытаетесь получить доступ к неинициализированному массиву.Вы должны создать объект массива, используя String names[] = new String[MAX_COUNT].

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

Я не уверен, что это может быть причиной, но требует внимания:

ваш метод отправки кнопки onclick:

  public void onClick(View submit1)
    {
        players++;
        for(int i=0; i < players; i++)
        {
            names[i] = input.getText().toString();
            input.setText("");
        }
    }

Здесь вы увеличиваете players счетчик.Затем перейдите от 0 к счетчику игроков.В цикле вы назначаете входной текст в массив имен.Наконец вы очищаете ввод.

Это неправильный способ.Вы не инициализировали массив имен.Также не стоит зацикливаться каждый раз.Это переопределит старые значения в массиве имен.И в следующий раз в цикле input.getText () вернет пустое значение, потому что вы удалили текст из ввода уже в первый раз, когда вы вошли в цикл.

Это должно быть

public void onClick(View submit1)
{
    names[players++] = input.getText().toString();
    input.setText("");
}

, если вы отлаживаетеваш код, вы лучше поймете, что я пытаюсь сказать.

...