Добавление изменений к каждому пользовательскому элементу listview

#android #listview

#Android #listview

Вопрос:

Итак, прямо сейчас у меня есть пользовательский адаптер listview, который добавляет еще одну строку, когда пользователь выбирает элемент. Дело в том, что у каждого элемента в строке должна быть кнопка изменения, где они могут выбрать добавление любой модификации (можно выбрать более одной модификации)

Это приложение для заказа еды, в котором при выборе элемента в списке должна быть еще одна кнопка с надписью «Изменить», где появляется всплывающее окно, позволяющее пользователю выбрать, какую модификацию он хочет, с помощью флажка. («Меньше соли», «Больше соуса» и т. Д.). Каждый список изменений одинаков для каждого блюда. Когда пользователь выходит из всплывающего окна и нажимает на ту же кнопку изменить, установленные флажки должны оставаться там.

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

Вот мой код

     modifyBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

           AlertDialog.Builder builder = new AlertDialog.Builder(context);
           builder.setTitle("Modification");

            final CharSequence[] modify_items = orderClass.getModifyList()
                    .toArray(new CharSequence[orderClass.getModifyList().size()]);
            builder.setMultiChoiceItems(modify_items, null, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
                    if(isChecked){
                        selectedList.add(indexSelected);
                        selectedItems.set(position, selectedList);
                    }
                    else if(selectedList.contains(indexSelected)){
                        selectedList.remove(Integer.valueOf(indexSelected));
                        selectedItems.set(position, selectedList);
                    }
                }
            })
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });
            AlertDialog dialog = builder.create();
            dialog.show();
            Log.d("dialog", "Showing dialog");


        }
    });


    return view;
}
  

Ответ №1:

Вам нужно поместить данные в структуру держателя (это своего рода класс, который содержит переменные), затем вы можете отображать данные по индексу, и существует связь между отображаемым индексом представления списка и индексом данных, поэтому, когда щелкает ячейка представления списка, вы получаете позицию, затем находите ее в структуре и публикуетеэто к другому действию или чему-либо еще, чтобы изменить его помните, что вы должны объявить флаг для запуска действия, иначе приложение выйдет из строя, я думаю, его называют activtyoutofbound index или что-то в этом роде