У меня есть список, на котором у меня onItemLongClickListener
. Все работает нормально, но когда я добавляю слишком много (например, 100) элементов в список, некоторые из них теряют слушателя. Не уверен, в чем проблема, я также отлаживал проблему и до сих пор не могу понять.
Не исключено и исключение, оно просто перестает работать.
Затем, если я удалю все из списка и начну добавлять вещи, он отлично работает, пока я не добавляю ко многим элементам.
Это проблема памяти?
Я искал везде, но не повезло.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_frame);
// Set text view for orderTotal
orderTotal = (TextView) findViewById(R.id.orderTotal);
orderTotal.setText("0.00");
// List view from layout
itemsListView = (ListView) this.findViewById(R.id.item_list);
// Current order to be consistent throughout activities.
currentOrder = ((OrderIt)this.getApplication()).getCurrentOrder();
databaseCategories = (ArrayList<Category>) this.getIntent().getExtras()
.getSerializable("databaseCategories");
// List of items already in order.
itemsListView.setAdapter(new ItemAdapter(this, R.layout.list_item,
currentOrder.getItems()));
itemsListView.setOnItemLongClickListener(this);
this.registerForContextMenu(itemsListView);
// Gridview from layout
gridView = (GridView) findViewById(R.id.item_grid);
ArrayList<Item> items = getItems();
gridView.setAdapter(new ImageAdapter(this, items));
// Set click adapter to grid view items
gridView.setOnItemClickListener(this);
gridView.setOnItemLongClickListener(this);
}
нашел решение проблемы,
я спрашивал
adapterView.getChildAt(position)
это неправильный способ сделать это, если вы хотите получить данные,
правильный путь - позвонить
adapterView.getItemAtPosition(position)
который возвращается под объектом, который использовался для заполнения listView.
Я думаю: ваш элемент содержит EditText или Button, который автоматически пытается получить фокус из элемента или спискаView. вам нужно установитьFocus (false) или listView.setItemsCanFocus(false); пусть просмотр элементов не может сфокусироваться.