2017-02-13 8 views
0

Я относительно новичок в java и новичок в студии android, поэтому любое объяснение будет принята с благодарностью.Как добавить текст из поля EditText в разные TextViews в студии android

Я хочу создать приложение, которое позволяет пользователю вводить имя someones и назначать их одной из двух команд. Я нахожусь в точке, где пользователь может добавить одно имя для каждой команды, но я не уверен, как добавить несколько имен в каждую команду.

В моем XML у меня есть поле EditText, чтобы ввести имя, две кнопки, чтобы поместить их в Team 1 или Team 2 и два TextViews, чтобы отобразить всех людей в каждой команде.

<EditText 
     android:layout_width="106dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/NameText"/> 

    <Button 
     android:id="@+id/Team1" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="Team 1"/> 

    <Button 
     android:id="@+id/Team2" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:text="Team 2" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/team1_person1"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/team1_person2" 
     android:layout_column="1"/> 

Вот мой код Java, я поставил каждую кнопку, чтобы добавить имя, введенное в TextView для команды 1 или команды 2, в зависимости от того, что кнопка была выбрана.

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Button t1button = (Button) findViewById(R.id.Team1); 
     Button t2button = (Button) findViewById(R.id.Team2); 


     t1button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // --- find the text view -- 
       EditText inputText = (EditText) findViewById(R.id.NameText); 
       String str = inputText.getText().toString(); 
       TextView newText = (TextView) findViewById(R.id.team1_person1); 
       newText.setText(str); 
      } 
     }); 

     t2button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // --- find the text view -- 
       EditText inputText = (EditText) findViewById(R.id.NameText); 
       String str = inputText.getText().toString(); 
       TextView newText = (TextView) findViewById(R.id.team1_person2); 
       newText.setText(str); 
      } 
     }); 



    } 
} 


I know I'll need to add more TextViews for each new name, but I'm not sure how this works with only one button. 
Thanks 

ответ

0

Вы можете добавить имена в тот же текст, используя append(). Это уменьшит количество объектов textview, которые требуются, как предложено в первом ответе.

t1button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // --- find the text view -- 
      EditText inputText = (EditText) findViewById(R.id.NameText); 
      String str = inputText.getText().toString() + "\n"; // add new line so each person is on their own line 
      TextView newText = (TextView) findViewById(R.id.team1_person1); 
      newText.append(str); // change setText to append. 
     } 
    }); 
+0

Вот и отсортирован, спасибо миллион! –

+0

Отлично! Рад, что это сработало для тебя! –

1

Легкий способ реализовать это динамически создавать новую Textview всякий раз, когда каждая из кнопок нажата

Прежде всего, вам, возможно, потребуется создать два LinearLayout для каждой команды.

И onClick метод следует изменить, как этот код.

TextView textView = new TextView(this); // create a new textview 
textView.setText(inputText.getText().toString()); 
myLinearLayout.addView(textView); // add the textview to the linearlayout 

Затем оно будет добавлено к каждой компоновке динамически, когда вы нажмете кнопку.

0

На каждой кнопки мыши вы можете создать новый TextView

TextView textView1 = new TextView(MainActivity.this); 
LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
textView1.setLayoutParams(tvParams); 
textView1.setText("Your Text); 
textView1.setBackgroundColor(Color.parseColor("#FF0000")); 
textView1.setPadding(0, 5, 0, 10); 
0

Мое решение по вашему делу довольно просто, в принципе, я бы обнаружить, какая кнопка нажата, и передать его в Java. Начнем с того, что в каждой кнопке XML я склонен добавить свойство «onClick» и назначить ему функцию. Это в основном то же самое, что и setOnClickListener в Java, но гораздо быстрее и проще. Во-вторых, поскольку ваши кнопки имеют идентификатор, используйте их, чтобы распознать, какая кнопка нажата, и в соответствии с этим запустите код. Вот код:

<EditText 
    android:layout_width="106dp" 
    android:layout_height="wrap_content" 
    android:id="@+id/NameText"/> 

<Button 
    android:id="@+id/Team1" 
    android:onClick="onClick" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="Team 1"/> 

<Button 
    android:id="@+id/Team2" 
    android:onClick="onClick" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="Team 2" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/team1_person1"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/team1_person2" 
    android:layout_column="1"/> 

Преимущество использования идентификаторов заключается в том, что вы можете использовать одну и ту же функцию для каждой кнопки. Ява, основываясь на том, что я объясняла ранее, может выглядеть так.

public void onClick (View view) { 
    String name = NameText.getText().toString; 
    int t1Counter = 0; 
    int t2Counter = 0; 
    switch(view.getId()) { 
     case R.id.Team1: 
      if (t1Counter == 0) { 
       team1_person1.setText(name); 
       t1Counter++; 
       NameText.setText(""); //Erases the EditText name, as we have saved it already in a team. 
      } else if (t1Counter == 1) { 
       team1_person2.setText(name); 
       t1Counter++; 
       NameText.setText(""); 
      } else { 
       Toast.makeText(this, "Team 1 is full", Toast.LENGTH_LONG).show(); //This displays a classic grey alert message for about a second, and doesn't assign the person to a team. 
      } 
      break; 
     case R.id.Team2: 
      if (t2Counter == 0) { 
       team2_person1.setText(name); 
       t2Counter++; 
       NameText.setText(""); //Erases the EditText name, as we have saved it already in a team. 
      } else if (t2Counter == 1) { 
       team2_person2.setText(name); 
       t2Counter++; 
       NameText.setText(""); 
      } else { 
       Toast.makeText(this, "Team 2 is full", Toast.LENGTH_LONG).show(); //This displays a classic grey alert message for about a second, and doesn't assign the person to a team. 
      } 
    } 
} 

Если вы хотите иметь более двух имен для каждой команды, добавьте «else if» для каждого дополнительного textView. Если вы не хотите показывать более 2 текстовых элементов на экране до тех пор, пока не будет добавлено третье имя, вы можете сделать третий (или более) TextView, выровнять его и все, что вам нужно, но затем положить его видимость до GONE. Таким образом, он не займет какое-либо место, пока кнопка для этой команды не будет нажата в третий раз.В Java, вам нужно будет добавить строку кода

tv3.setVisibility(View.VISIBLE); 

Я надеюсь, что это помогает