Подтвердить что ты не робот

Android - listview получить просмотр позиции по позиции

У меня есть listview с пользовательским адаптером (базовый адаптер). Я хочу получить представление из списка по позиции. Я пробовал mListView.getChildAt(position), но он не работает. Как я могу получить просмотр позиции по позиции?

4b9b3361

Ответ 1

Используйте это:

public View getViewByPosition(int pos, ListView listView) {
    final int firstListItemPosition = listView.getFirstVisiblePosition();
    final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

    if (pos < firstListItemPosition || pos > lastListItemPosition ) {
        return listView.getAdapter().getView(pos, null, listView);
    } else {
        final int childIndex = pos - firstListItemPosition;
        return listView.getChildAt(childIndex);
    }
}

Ответ 2

Вы можете получить только видимый вид из ListView, потому что представления строк в ListView повторно используются. Если вы используете mListView.getChildAt(0), вы получаете первый видимый вид. Это представление связано с элементом из адаптера в позиции mListView.getFirstVisiblePosition().

Ответ 3

Предпочтительный способ изменения внешнего вида/любого вида представлений строк после рисования ListView заключается в том, чтобы что-то изменить в элементе данных ListView (массив объектов, передаваемых в ваш адаптер), и не забудьте указать это в своем getView(), затем перерисуйте ListView, вызвав

notifyDataSetChanged();

РЕДАКТИРОВАТЬ: пока есть способ сделать это, если вам нужно сделать это, вы делаете что-то неправильно. Пока я вижу несколько краевых случаев, обычно использую notifyDataSetChanged(), а другие встроенные механизмы - это путь.

РЕДАКТИРОВАТЬ 2: Одна из распространенных ошибок, которые люди делают, пытается придумать свой собственный способ ответить на щелчок пользователя/выбор строки в ListView, как в одном из комментариев к этому сообщению. Существует существующий способ сделать это. Вот как:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    /* Parameters
    parent:     The AdapterView where the click happened.
    view:       The view within the AdapterView that was clicked (this will be a view provided by the adapter)
    position:   The position of the view in the adapter.
    id:         The row id of the item that was clicked. */
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //your code here
    }
});

ListView имеет множество встроенных функций, и нет необходимости изобретать колесо для более простых случаев. Поскольку ListView extends AdapterView, вы можете установить одинаковые Слушатели, такие как OnItemClickListener, как в приведенном выше примере.

Ответ 4

Listview lv = (ListView) findViewById(R.id.previewlist);

    final BaseAdapter adapter = new PreviewAdapter(this, name, age);

    confirm.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub


            View view = null;

            String value;
            for (int i = 0; i < adapter.getCount(); i++) {

                view = adapter.getView(i, view, lv);

                Textview et = (TextView) view.findViewById(R.id.passfare);


                value=et.getText().toString();

                 Toast.makeText(getApplicationContext(), value,
                 Toast.LENGTH_SHORT).show();
            }



        }
    });