如何在Listview中获取所有textView的值?

时间:2016-10-10 15:57:47

标签: java android listview nullpointerexception

我试图在ListView中获取TextView和EditText的所有值,但我有一个奇怪的问题。这是我的示例代码,我删除了EditText以保持简单:

 lv = (ListView) findViewById(R.id.person_details_lv);
        Integer x = lv.getAdapter().getCount();
        for (int i = 0; i < lv.getAdapter().getCount(); i++) {
            View viewRow = lv.getChildAt(i);
            //this next condition get the index of the view visible only
         if (viewRow != null) {
            TextView NameEditText = (TextView) viewRow.findViewById(R.id.detail_name);
            Log.d("hello", "Anything detected onscreen:" + NameEditText.getText().toString() + ");
        }}

问题是它只返回屏幕上可见的视图。但是,getCount计算一切。结果,我收到此错误

  

显示java.lang.NullPointerException

我添加了这个条件:if (viewRow != null)删除错误,但它一直只显示屏幕上的视图。当我滚动listView时,结果也会改变。我想要做的是获取ListView中TextViewe的值,无论是否在屏幕上看到。

3 个答案:

答案 0 :(得分: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);
        }
    }

然后通过重新启动:

来调用此方法
View viewRow = lv.getChildAt(i);

使用:

viewRow= getViewByPosition(i, lv);

那就是它!你不需要改变其余的。只需删除此if (viewRow != null)即可。我希望它有所帮助!

答案 1 :(得分:0)

因为你的listview项目中的所有视图都不是TextView类型,所以当你施放它们时,它们的som为null。 (将TextView以外的视图转换为TextView会生成null对象)

在转换之后,只检查它是否为null,如果它的null只是跳过它就是TextView。

在铸造后添加空条件!

答案 2 :(得分:-1)

您必须将Listview项存储在传递给适配器的List <>中。调用OnTextChanged时,必须存储EditText的值。 TextView值已在列表中可用。