Как обрабатывать переключатели в ExpandableListView? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть ExpandableListView с более чем или равным 2 группам. В этих группах есть несколько пунктов с переключателями. Поэтому, когда я выбираю одну радиокнопку из одной группы, другие кнопки из другой группы не должны выбираться.

Следующий код помогает заставить радиокнопку работать как радиогруппа.

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.attribute_expanable_child_item, null);
    }

    RadioButton mRadioButton = convertView.findViewById(R.id.radio_option);
    mRadioButton.setVisibility(View.VISIBLE);
    mRadioButton.setText(mItem.getAttributeName());

    mRadioButton.setChecked(childPosition == selectedPosition);
    mRadioButton.setTag(childPosition);

    mRadioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            selectedPosition = (Integer) view.getTag();
            notifyDataSetChanged();
        }
    });
}

Прямо сейчас, если я выберу один элемент из одной группы, другой элемент из другой группы будет выбран в той же позиции! Я знаю, что должен сохранять выбранные позиции в массиве, но я не понимаю, как. Итак, что я должен сделать, чтобы добиться этого для нескольких групп в ExpandableListView?

1 Ответ

0 голосов
/ 28 мая 2018

Я нашел решение назад, но был занят проектом, поэтому разместил его сейчас, учитывая, что кто-то может получить от него помощь!

Чтобы сохранить выбранную позицию, соответствующую этой конкретной группе в расширяемом ListView, я должен сохранить эту позицию! Поэтому я сохранил его с помощью HashMap.

Итак, в первом параметре hashmap я сохранил положение группы и идентификатор второго представления. И установите его, когда заполняется дочерний объект расширяемого объекта.

Итак, окончательный код выглядит следующим образом:

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    final AttributePOJO mItem = (AttributePOJO) getChild(groupPosition, childPosition);
    String mGroup = (String) getGroup(groupPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this.mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.attribute_expanable_child_item, null);
    }

    RadioButton mRadioButton = convertView.findViewById(R.id.radio_option);
    mRadioButton.setVisibility(View.VISIBLE);

    try {
        mRadioButton.setChecked(childPosition == mChildCheckStates.get(groupPosition));

    }catch (Exception e){
        e.printStackTrace();
    }
    mRadioButton.setTag(childPosition);

    mRadioButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mChildCheckStates.put(groupPosition, (Integer) view.getTag());
            notifyDataSetChanged();
        }
    });

    return convertView;
}

И это все!

...