Android ListView mListView.getChildAt (i) null, как его решить?

Я создаю код ниже:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { for (int i = 0; i < mListView.getCount(); i++) { View callLogView = mListView.getChildAt(i); mRelativeLayout = (LinearLayout)callLogView.findViewById(R.id.myShow); if(i == position){ if(mRelativeLayout.getVisibility() == View.GONE){ mRelativeLayout.setVisibility(View.VISIBLE); } else{ mRelativeLayout.setVisibility(View.GONE); } }else{ mRelativeLayout.setVisibility(View.GONE); } } } }); 

Я хочу реализовать функцию, например, когда я нажимаю один элемент Listview , он отображает представление, а остальные элементы Listview будут скрыты. Но mListView.getChildAt(i) будет иметь нулевой указатель после превышения mListView.getChildCount() .

Как это решить? Заранее спасибо!

AdapterView.getCount () возвращает количество элементов данных, которое может быть больше, чем количество видимых видов, поэтому вы получаете исключение нулевого указателя, потому что вы пытаетесь найти представления, которые не существуют в текущих видимых элементах ListView.

Чтобы решить эту проблему, сначала нужно найти первый видимый элемент в ListView, используя getFirstVisiblePosition() и последний видимый элемент, используя getLastVisiblePosition() . Измените условие цикла:

 int num_of_visible_view=mListView.getLastVisiblePosition() - mListView.getFirstVisiblePosition(); for (int i = 0; i < num_of_visible_view; i++) { // do your code here } 

Вы не можете реализовать это в onItemClick.

Поскольку вы можете получить доступ только к видимому ребенку, не все дочерние.

Что вы можете сделать, это onItemClick

Вы можете отправить позицию в адаптер

А затем установить логику там в getView тоже изменить вид

И обновить адаптер в списке, или уведомить об изменениях.