android ListView mListView.getChildAt(i) 为null,如何解决?

标签 android android-listview

我创建以下代码:

 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的一个item时,它会显示一个 View ,而Listview的其他item会被隐藏。但是 mListView.getChildAt(i) 在超过 mListView.getChildCount() 后将有空指针。

如何解决?提前致谢!

最佳答案

AdapterView.getCount()返回数据项的数量,这可能大于可见 View 的数量,这就是你得到空指针异常的原因,因为你试图找到当前可见的 ListView 项目中不存在的 View 。

要解决此问题,您首先需要使用 getFirstVisiblePosition() 找到 ListView 中的第一个可见项,并使用 getLastVisiblePosition() 找到最后一个可见项。将 for 循环条件更改为:

int num_of_visible_view=mListView.getLastVisiblePosition() - 
                                   mListView.getFirstVisiblePosition();

for (int i = 0; i < num_of_visible_view; i++) {
      // do your code here
 }

关于android ListView mListView.getChildAt(i) 为null,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14619271/

相关文章:

java - 我如何从Android中的毫秒数中获取一天中的小时数

android - 如何将按钮添加到 Fragment TabHost

android - 更新 Android 中 ListView 项的值

android - 如何解决数据库选项卡菜单中的这个错误?

java - 调整行大小时用 View 填充 ListView 行高

android - 每次都会调用 Fragment 中的 OnCreateView

android - 无法将我的数据库文件访问到应用程序中

Android 单击 ListViewItem 时加载 fragment

android - android listview 中的垂直分隔线不起作用

Android:使用更大的图标创建更大的 float 操作按钮