2014-09-13 3 views
6

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

Обновление: Я только что узнал, что мне нужно ListView элементов (строк). Как я могу это достичь?
Что я делаю, сравнивая выбранный элемент ListView со всеми элементами.

+0

Не совсем уверен, почему вы это делаете, но не лучше ли просто вытащить все данные прямо из адаптера? Вместо того, чтобы вытаскивать представления из ListView. –

ответ

4

Вы получаете весь список элемент из списка адаптера через итерации, как показано ниже

for (int i=0;i<adapter.getCount();i++){ 
    adapter.getItem(i); 
} 

Update: Вы можете сравнить конкретный элемент с помощью индекса с списка адаптера все элементы, как показано ниже:

for (int i=0;i<adapter.getCount();i++){ 
    if(adapter.get(selectedIndex)==adapter.getItem(i)){ 
     // TODO : write code here item match 
     break; // after match is good practice to break loop instead compare rest of item even match 
    } 
} 
+0

См. Обновленный вопрос. – Nitish

1

мая будь то что-то вроде этого. У вас должен быть доступ к rootView, из которого вы можете получить дочерние представления. onItemSelected используется только в том случае, если он дает корень щелкнутого положения.

public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) { 
ImageView imgView = view.findViewById(R.id.myImageView);//your imageview that is inflated inside getView() of adapter 
//similarly for other views 
} 
3

Используйте этот метод, чтобы получить все понимание и вне видимости вид представления списка:

for (int i = 0 ; i < listView.getCount() ; i++){ 
    View v = getViewByPosition(i,listView); 
} 

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

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

Я думаю, если ваши элементы в ListView имеют тип ViewGroup вы могли бы сделать следующее

ArrayList<View> children = new ArrayList<View>(); 
for (int i = item.getChildCount() - 1 ; i>=0; i--) { 
    children.add(item.getChildAt(i)); 
} 
+0

Это должен быть принятый ответ. – josh123a123