Кнопки переключения Android на итерации

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

public class CustomFriendList  extends ArrayAdapter<String> {

private final Activity context;
private List<String> friendName = new ArrayList<String>();
private List<String> backchatable = new ArrayList<String>();


public CustomFriendList(Activity context, List<String> friendName, List<String> backchatable){
    super(context, R.layout.fragment_friend_list_item, friendName);
    this.context = context;
    this.friendName = friendName;
    this.backchatable = backchatable;
}

@Override
public View getView(int position, View view, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View rowView= inflater.inflate(R.layout.fragment_friend_list_item, null, true);
    TextView friend = (TextView) rowView.findViewById(R.id.friendName);
    Switch switchBackChat = (Switch) rowView.findViewById(R.id.on_off_backchatable);

    friend.setText(friendName.get(position));

    for (String ele : backchatable) {
        //System.out.println(ele.toString());
        if(ele.equals("false")){
            switchBackChat.setChecked(false);
        }else if(ele.equals("true")){
            switchBackChat.setChecked(true);
        }
    }

    return rowView;
}


}

Я хочу установить состояние переключателей в соответствии со значениями «истина» или «ложь».

Однако приведенный выше код переключает все переключатели в пользовательском listView, а не соответствующие переключатели в какой-либо позиции в listView.


person Jupiter    schedule 05.06.2017    source источник
comment
Не могли бы вы опубликовать весь свой метод getView, пожалуйста? Кроме того, как предложил @Pavneet_Singh, вы неправильно проверяете строковые значения (вместо этого используйте ele.equals(false), поскольку это правильный способ проверить строковое значение в Java).   -  person Glenn Porter    schedule 05.06.2017
comment
проверка от == до .equals верна. Однако отдельные переключатели не изменяются соответствующим образом. Они все вместе меняются.   -  person Jupiter    schedule 05.06.2017


Ответы (1)


Используйте ele.equals("false") и ele.equals("true") в операторах if или просто используйте логические значения вместо строковых значений.

И почему вы устанавливаете проверенный статус при переборе массива backchatable? При этом имеет значение только последняя строка массива, и если последняя строка «ложь», переключатель не будет проверен, а если последняя строка «истина», переключатель будет проверен.

person Phil90    schedule 05.06.2017
comment
Это именно проблема. Но как тогда самостоятельно менять переключатели? Я пытался последовательно установить элементы listView, которые содержат textView и переключатель, но поскольку мне не удалось обновить их из общего списка, я сделал два списка. - person Jupiter; 05.06.2017
comment
Проверьте редактирование. По сути, я пытаюсь поместить в каждую строку listView комбинацию имени друга в textView и установить переключатель в положение true/false. К сожалению, мне приходится выполнять этот процесс, извлекая данные из двух списков, потому что из JSONObject я не могу создать один список, на который этот пользовательский адаптер массива может воздействовать для отображения listView. - person Jupiter; 05.06.2017
comment
метод getView вызывается для каждой строки вашего списка. Позиция параметра сообщает вам, какой элемент строки должен быть возвращен. Поэтому, когда position равно 0, должна быть возвращена первая строка списка. Поэтому вам нужно проверить, равно ли значение backchatable.get(position) true или false. Вам не нужно перебирать список. Просто используйте метод get, как при получении имени друга. - person Phil90; 05.06.2017
comment
Спасибо, это многое объяснило! - person Jupiter; 06.06.2017