Я пытался решить проблему со своими списками, кажется, десять часов. В настоящее время я программирую приложение quizapp и у меня есть MainActivity с gettern и settern, а затем у меня загружаются фрагменты.
Fragment1 fragment1 = new Fragment1();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.linear_fragment_1, fragment1, "findThisFragment").addToBackStack(null).commit();
Затем загружается список ставок из получателя MainActivity. Это было определено в начале, например, список для 3 игроков, каждый из которых получает ставку 5
, тогда список будет [5,5,5]
.
Первый игрок вводит свою ставку, и ArrayList (listBet) обновлено. Вот код для получения списка из метода получения в MainActivity.
private int playerNumber = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.quiz_fragment, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
//initViews
(...)
private MainActivity getterMain = (MainActivity) getActivity();
private ArrayList<Integer> listBet = getterMain.getLisBet();
(...)
//initListener
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final int bet = Integer.parseInt(editTextBet.getText().toString());
//I'm using .set because I want to update the value at the position
listBet.set(0, bet);
//Edittext clear field
editTextBet.getText().clear();
//method for the next player
nextPlayer(playernumber);
}
}
}
, который тоже неплохо работает, но теперь очередь за игроком. Код:
private void nextPlayer(int playerNumbers) {
//again. The field should be cleared
editTextBet.getText().clear();
//increase the actual playerNumber
playerNumbers++;
btnNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
(...)
int betNew = Integer.parseInt(editTextBet.getText().toString());
//setting the list at the new position with new value
listBet.set(playerNumbers, betNew);
//call the same method again
nextPlayer(playerNumbers);
//edittext should be cleared again
editTextBet.getText().clear();
(…)
}
независимо от того, что он вводит, он всегда получает значение первого игрока, а третий игрок получает значение второго.
Например. Player1 вводит 3
, player2 2
, player3 4
Список должен выглядеть так: [3,2,4]
но он выглядит так [3,3,2]
.
Почему это происходит ? Я действительно в отчаянии и, вероятно, слишком долго сидел в нем, чтобы увидеть проблему.
если вам что-то еще нужно, просто дайте нам знать. заранее спасибо!