#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 или что-то в этом роде