Android - установка слушателя на элементы в каждой строке ExpandableListView - PullRequest
0 голосов
/ 06 февраля 2020

В каждой строке у меня есть два EditTexts. Когда я изменяю первый, я хочу, чтобы другой также был изменен (при необходимости, пока просто устанавливаю там «25» для тестирования). Я использую шаблон держателя, и установка для каждого из первых правок ввода текста TextChangedListener, ожидая, что вторая также будет изменена. Проблема состоит в том, что всякий раз, когда я изменяю ЛЮБОЙ из первых правок текста на ЛЮБОЙ из строк, изменяется только текст редактирования в последней строке. Вот код адаптера (слушатель находится в getgroupview):

public class CustomExpandableListAdapterNewWorkout extends BaseExpandableListAdapter {
    private Context context;
    private List<String> expandableListTitle;
    private HashMap<String, List<String>> expandableListDetail;

    private ChildViewHolder childViewHolder;
    private GroupViewHolder groupViewHolder;

    public CustomExpandableListAdapterNewWorkout(Context context, List<String> expandableListTitle,
                                                HashMap<String, List<String>> expandableListDetail) {
        this.context = context;
        this.expandableListTitle = expandableListTitle;
        this.expandableListDetail = expandableListDetail;
    }

    @Override
    public Object getChild(int listPosition, int expandedListPosition) {
        return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
                .get(expandedListPosition);
    }

    @Override
    public long getChildId(int listPosition, int expandedListPosition) {
        return expandedListPosition;
    }

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

        final String expandedListText = (String) getChild(listPosition, expandedListPosition);
        String categoryName= (String)getGroup(listPosition);

        if (convertView == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) this.context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_item_exercises_exercise, null);

            childViewHolder = new ChildViewHolder();
            childViewHolder.mChildTitle =  (TextView) convertView.findViewById(R.id.expandedListItem);
            childViewHolder.mChildImage = (ImageView) convertView.findViewById(R.id.ImgExercisePic);

            convertView.setTag(childViewHolder);
        }
        else
        {
            childViewHolder = (ChildViewHolder) convertView.getTag();
        }
        childViewHolder.mChildTitle.setText(expandedListText);
        childViewHolder.mChildTitle.setTextAppearance(context,R.style.TitleStyle);




        return convertView;
    }
    @Override
    public int getChildrenCount(int listPosition) {
        return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
                .size();
    }

    @Override
    public Object getGroup(int listPosition) {
        return this.expandableListTitle.get(listPosition);
    }

    @Override
    public int getGroupCount() {
        return this.expandableListTitle.size();
    }

    @Override
    public long getGroupId(int listPosition) {
        return listPosition;
    }

    @Override
    public View getGroupView(int listPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {

        String listTitle = (String) getGroup(listPosition);

        if (convertView == null)
        {
            LayoutInflater layoutInflater = (LayoutInflater) this.context.
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = layoutInflater.inflate(R.layout.list_group_new_workout_exercise, null);

            groupViewHolder = new GroupViewHolder();
            groupViewHolder.mGroupTitle = (TextView) convertView.findViewById(R.id.exerciseName);
            groupViewHolder.mMinSets = (EditText) convertView.findViewById(R.id.edtMinimumSets);
            groupViewHolder.mMaxSets = (EditText) convertView.findViewById(R.id.edtMaxSets);

            groupViewHolder.mMinSets.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {
                    groupViewHolder.mMaxSets.setText("25");
                }

            });

            convertView.setTag(groupViewHolder);
        }
        else
        {
            groupViewHolder = (GroupViewHolder) convertView.getTag();
        }

        groupViewHolder.mGroupTitle.setText(listTitle);

        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int listPosition, int expandedListPosition) {
        return true;
    }

    public final class GroupViewHolder {
        TextView mGroupTitle;
        EditText mMinSets;
        EditText mMaxSets;
    }

    public final class ChildViewHolder {
        TextView mChildTitle;
        ImageView mChildImage;

    }
}

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

1 Ответ

0 голосов
/ 09 февраля 2020

хорошо, мой плохой. должен был объявить «GroupViewHolder groupViewHolder» внутри метода getGroupView, таким образом каждый раз создается новый с новым слушателем, который влияет на его соответствующую строку

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