Android: доступ мнения ребенка из ListView

голоса
103

Мне нужно , чтобы выяснить позицию пикселя одного элемента в списке , который был отображается с помощью ListView. Похоже , что я должен получить один из TextView - х , а затем использовать getTop(), но я не могу понять, как получить вид ребенка , находящегося на ListView.

Обновление: Дети из ViewGroupне соответствуют 1-к-1 с элементами списка, для ListView. Вместо этого, ViewGroup«ы дети отвечают только те взгляды, которые видны прямо сейчас. Так getChildAt()работает по индексу , что внутренние к ViewGroupи не обязательно иметь ничего общего с позицией в списке , что ListViewиспользует.

Задан 02/11/2008 в 23:40
источник пользователем
На других языках...                            


6 ответов

голоса
212

Смотрите: Android ListView: получить данные индекса видимого элемента и объединить с частью ответа Feet превыше, может дать вам что - то вроде:

int wantedPosition = 10; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
// Say, first visible position is 8, you want position 10, wantedChild will now be 2
// So that means your view is child #2 in the ViewGroup:
if (wantedChild < 0 || wantedChild >= listView.getChildCount()) {
  Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
  return;
}
// Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead.
View wantedView = listView.getChildAt(wantedChild);

Преимущество заключается в том, что вы не итерацию детей в ListView, который мог бы принять удар по производительности.

Ответил 21/04/2010 d 00:01
источник пользователем

голоса
17

Этот код проще в использовании:

 View rowView = listView.getChildAt(viewIndex);//The item number in the List View
    if(rowView != null)
        {
           // Your code here
        }
Ответил 01/01/2012 d 09:20
источник пользователем

голоса
6

Быстрый поиск в документации для класса ListView подвернулся GetChildCount () и getChildAt () методы, унаследованные от ViewGroup. Вы можете перебирать их, используя их? Я не уверен, но это стоит попробовать.

Нашел здесь

Ответил 03/11/2008 d 00:04
источник пользователем

голоса
5
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long   id) 
{       
    View v; 
    int count = parent.getChildCount();
    v =parent.getChildAt(position);
    parent.requestChildFocus(v, view);  v.setBackground(res.getDrawable(R.drawable.transparent_button));
            for (int i=0; i<count; i++)
            {
                if (i!= position)
                {
                    v = parent.getChildAt(i);t  v.setBackground(res.getDrawable(R.drawable.not_clicked));

                }
            }
        }
    });

В принципе, создать два вводимые коэффициент - тот , который является прозрачным, а другим , который желаемым цветом. Запрос фокус на щелкнул положение (положение INT , как это определено) и изменить цвет указанной строки. Затем пройти через родителей listview, и изменить все остальные строки соответственно. Это объясняет , когда пользователь нажимает на listviewнесколько раз. Это делается с помощью пользовательского макета для каждой строки в listview. (Очень просто, новый файл макет с textview- не установлен фокусированием или интерактивным!) Не требуется пользовательский адаптер - использовать массив адаптер

Ответил 27/06/2013 d 14:54
источник пользователем

голоса
4
int position = 0;
listview.setItemChecked(position, true);
View wantedView = adapter.getView(position, null, listview);
Ответил 29/01/2016 d 08:11
источник пользователем

голоса
-9

Это предполагает, что вы знаете позицию элемента в ListView:

  View element = listView.getListAdapter().getView(position, null, null);

Тогда вы должны быть в состоянии назвать getLeft () и getTop () для определения элементов на положение экрана.

Ответил 04/12/2008 d 15:08
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more