Элементы Android ListView теряют слушателя, если добавлено слишком много элементов - PullRequest
1 голос
/ 22 марта 2012

У меня есть список, к которому я прикрепил 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);          

}

Ответы [ 2 ]

0 голосов
/ 22 марта 2012

нашел решение проблемы,

Я спрашивал

adapterView.getChildAt(position) 

, что является неправильным способом сделать это, если вы хотите получить данные ниже,

правильный путь - позвонить

adapterView.getItemAtPosition(position)

, который возвращает под объектом, который использовался для заполнения listView.

0 голосов
/ 22 марта 2012

Я думаю: Ваш элемент содержит EditText или Button, которые автоматически получают фокус от элемента или listView.вам нужно установить setFocus (false) или listView.setItemsCanFocus (false);пусть виды элементов не могут фокусироваться.

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