Редактирование текста и использование кнопок для их отправки

#java #android #button #android-edittext

#java #Android #кнопка #android-редактирование текста

Вопрос:

Итак, в принципе, я хотел бы, чтобы это позволяло пользователю вводить текст (свое имя). Затем нажать кнопку отправки, которая сохранит это имя в массив и сотрет запись в 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);
        }
    });
}
  

Ответ №1:

Вы нигде не выделяете для переменной names . Вы должны сделать это:

 names = new String[NO_OF_PLAYERS];
  

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

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

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

 names.add(input.getText().toString());
  

Комментарии:

1. Хорошо, я провел тест-драйв вашего. Кнопка отправки работает, насколько я знаю сейчас. Единственная проблема, с которой я сталкиваюсь, — это когда я нажимаю кнопку воспроизведения. Вот как выглядит эта кнопка.

2. ‘code’ Кнопка doneButton = (кнопка) findViewById(R.id.done_btn); Кнопка doneButton.setOnClickListener(новый вид. OnClickListener() { public void onClick(Просмотр выполнен1) { Намерение выполнено = новое намерение (TokerGame.this, Game.class ); Bundle bundle = new Bundle(); bundle.putStringArrayList(«arrayKey», имена); done.putExtra(«игроки», players); //done.putExtra(«имена», имена [игроков]); startActivity(готово); } });’

Ответ №2:

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

Ответ №3:

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

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

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

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

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

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

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

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

Ответ №4:

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

   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);
            }
        });
    }