ArrayList не инициируется при каждом клике пользователя (onClick) Android - PullRequest
0 голосов
/ 21 сентября 2018

Я думаю, что это странно, но я не могу начать свой метод ArrayList in onClick.вот код:

@Override
public void onClick(View v) {
    SelectedCoinsListener selectedCoinsListener = this;
    List<SelectCurrency> finalList;
    finalList = this.currenciesPair;

    switch (v.getId()) {

        case R.id.fromCurrency :
            if (toCurrency != null) {

                for (int i = 0 ; i < finalList.size() ; i++ ){

                    if (finalList.get(i).getCurrencyId() == toCurrency) {
                        finalList.remove(i);
                    }
                }
            }
            customAlertDialogList = new CustomAlertDialogList(getContext(), finalList, selectedCoinsListener, false);
            break;
} 

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

Спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Объекты не работают таким образом в Java.Когда вы делаете это:

finalList = this.currenciesPair;

вы в основном создаете два указателя на один и тот же объект.Поэтому, если вы выполните finalList.remove(i), любой элемент, который был в i, также будет удален из currenciesPair.

Если вы хотите сделать копию, у класса ArrayList есть удобный конструктор:

List<SelectCurrency> finalList = new ArrayList(currenciesPair);

Это не делает ArrayList<ArrayList<SelectCurrency>> таким, каким может показаться.Если вы действительно посмотрите на код этого конструктора, вы увидите, что он перебирает заданную коллекцию (List, Set, ArrayList, ArraySet и т. Д.) И добавляет значения к создаваемому ArrayList.Поэтому вместо создания двух указателей для одного и того же объекта у вас есть два отдельных объекта с одинаковым содержимым.

РЕДАКТИРОВАТЬ:

Я рекомендую использовать итератор вместо стандартного цикла for.Это немного чище:

for (SelectCurrency currency : currenciesPair) {
    if (currency.getCurrencyId() == toCurrency) finalList.remove(currency)
}

Обратите внимание, что я использую currenciesPair, а не finalList в строке for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...