#android #android-studio
#Android #android-studio
Вопрос:
Я пытаюсь создать приложение для официантов, которое позволяет официанту принимать заказы.
Я пытаюсь добиться этого с помощью ListView
и setOnItemClickListener
.
Моя идея заключается в том, что каждый раз, когда Item
нажимается на ListView
, он будет добавлен в ArrayList<Item>
. Позже я могу передать этот список методу, созданному в DataBaseHelper
, который затем выполняет итерации по списку и добавляет каждый элемент из порядка в SQLite database
.
Я еще не создал метод в DataBaseHelper
классе, но я хотел бы знать, как сначала заполнить ArrayList<Item>
, а затем перейти к следующему шагу.
Таблица, в которую я буду добавлять список, имеет manny to many
связь и называется order_item
. Что также вызывает вопрос, поскольку мне не нужны полные сведения о Item
и только ID
для сохранения в таблице, нужно ли мне получать всю информацию об элементе?
Прямо сейчас происходит то, что приложение позволяет мне щелкнуть и добавить один элемент, а затем приложения вынуждены закрываться.
Я также не уверен, должен ли я сделать ArrayList
глобальную переменную или иметь ее в Order Object
качестве переменной?
В журнале говорится:
java.lang.Исключение IllegalStateException: Содержимое адаптера изменилось, но ListView не получил уведомления. Убедитесь, что содержимое вашего адаптера не изменяется из фонового потока, а только из потока пользовательского интерфейса. Убедитесь, что ваш адаптер вызывает notifyDataSetChanged() при изменении его содержимого. [в ListView(2131165292, класс android.widget.ListView) с адаптером (класс android.widget.ArrayAdapter)]
OrderActivity
public class OrderActivity extends AppCompatActivity {
EditText waiter_id;
Button order;
ListView orderList;
List<Item> itemList = new ArrayList<Item>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_order);
waiter_id = (EditText) findViewById(R.id.waiter_id);
order = (Button) findViewById(R.id.order_button);
orderList = (ListView) findViewById(R.id.item_list);
//Showing Items on the ListView
DataBaseHelper dbHelp = new DataBaseHelper(OrderActivity.this);
final List<Item> itemList = dbHelp.getMenu();
ArrayAdapter itemArrayAdaptor = new ArrayAdapter<Item>(OrderActivity.this, android.R.layout.simple_list_item_1, itemList);
orderList.setAdapter(itemArrayAdaptor);
// setOnItemClickListener
orderList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
Item item;
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
//Selecting the Item and storing it in a reference variable to add to itemList
Toast.makeText(OrderActivity.this, "Order" pos , Toast.LENGTH_SHORT).show();
Item item = (Item) adapterView.getAdapter().getItem(pos);
Toast.makeText(OrderActivity.this, item.toString() , Toast.LENGTH_SHORT).show();
itemList.add(item);
}
});
}
}
Комментарии:
1. можете ли вы показать журнал при принудительном закрытии приложения?
Ответ №1:
Проблема заключалась в том, что я не уведомлял список notifyDataSetChanged()
о том, что выбранный мной элемент изменился, вот код, который теперь заполняет список.
// setOnItemClickListener
orderList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
Order order;
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
//Selecting the Item and storing it in a reference variable to add to itemList
Toast.makeText(OrderActivity.this, "Order" pos , Toast.LENGTH_SHORT).show();
orderItemList.add((Item) adapterView.getAdapter().getItem(pos));
itemArrayAdaptor.notifyDataSetChanged();
Toast.makeText(OrderActivity.this, orderItemList.toString(), Toast.LENGTH_SHORT).show();
}
});
Ответ №2:
orderList.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> adapterView, View
view, int pos, long id) {
Toast.makeText(OrderActivity.this, "Added"
,Toast.LENGTH_SHORT).show();
itemList.add(adapterView.getItemAtPosition(pos));
}
});
Комментарии:
1. Спасибо, но это не решило проблему, я отредактировал код, и теперь я могу получить выбранный элемент. Но при попытке добавить это в
itemList
программа вылетает. Я отредактировал вопрос с новым кодом и сообщением об ошибке2. Привет, @Dave не могли бы вы предоставить журнал ошибок? чтобы у меня был лучший обзор ошибки!