Я создаю приложение для проводника игры. В этой игре проводник должен вводить имена каждого игрока в поле EditText, имена будут сохранены в массиве строк для будущих назначений ролей.
Мой идентификатор EditText - это addplayer, и я назначил ему метод setOnEditorActionListener ().
Я добавил это условие if (actionId == EditorInfo.IME_ACTION_NEXT)
в его тело.
Хотя ни одна из моих команд не работает.
public class FirstActivity extends AppCompatActivity implements View.OnClickListener {
static List<String> names = new ArrayList<>();
static int playerSum = 0;
RelativeLayout firstActLayout;
TextView numberOfPlayers;
EditText addPlayer;
TextView doneButton;
TextView settingsButton;
InputMethodManager imm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_activity);
firstActLayout = findViewById(R.id.first_act_layout);
numberOfPlayers = findViewById(R.id.number_of_players);
addPlayer = findViewById(R.id.add_player);
doneButton = findViewById(R.id.done_button);
settingsButton = findViewById(R.id.settings_button);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.add_player:
addPlayers();
break;
case R.id.done_button:
openSecondActivity();
break;
case R.id.settings_button:
break;
}
}
public void addPlayers (){
addPlayer.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_NEXT) {
// add player's name to the name array.
names.add(addPlayer.getText().toString());
// increment the total number of players.
playerSum++;
// display the total number of players next the hash tag.
numberOfPlayers.append(Integer.toString(playerSum), 8, 12);
// keep the soft keyboard available for the next entry.
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
return false;
}
});
}
}
XML:
<EditText
android:id="@+id/add_player"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="3dp"
android:layout_marginTop="3dp"
android:layout_marginRight="3dp"
android:layout_marginBottom="3dp"
android:autofillHints="@string/enter_name"
android:background="#fff"
android:layout_centerHorizontal="true"
android:hint="@string/enter_name"
android:inputType="text"
android:clickable="true"
android:focusable="true"
android:imeOptions="actionNext"
android:singleLine="true"
android:textColor="#FF030303"
tools:targetApi="o"
/>
Я хочу, чтобы проводник мог:
1. введите имя в EditText
2. и нажмите следующий значок на программной клавиатуре.
Публичный void addPlayers () должен:
1. возьмите добавленное имя и присвойте его массиву names [],
2. удалите поле EditText для следующей записи,
3. увеличить количество игроков с помощью playerSum ++,
4. отобразить общее количество игроков (playerSum ++) в поле TextView (numberOfPlayers).
5. держите экранную клавиатуру на дисплее для следующего имени.
но ничего не происходит. Имя игрока находится в поле EditText.