2017-05-30 51 views
0

我使用ListView来显示我的项目。当项目改变我更新适配器列表,并调用notifyDataSetChanged()Android ListView无法正常刷新

MyAdapter adapter = (MyAdapter) myListView.getAdapter(); 
if(adapter == null) { 
    adapter = new MyAdapter(this, itemList); 
    myListView.setAdapter(adapter); 
} 
adapter.notifyDataSetChanged(); 

这似乎在某种程度上工作,因为我的ListView显示更多的项目,但在列表中的新项目没有得到正确显示。

这些项目不显示任何信息。看起来适配器没有刷新这些新项目。

适配器看起来像这样(简化):

public View getView(int position, View convertView, ViewGroup parent) { 
    Point point = getItem(position); 
    if (convertView == null) 
     convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_point, parent, false); 

    TextView firstLine = (TextView) convertView.findViewById(R.id.firstLine); 
    firstLine.setText(point.getNumber()); 
} 

enter image description here

+0

请检查控制台。数据是否正确检索或不。如果它是正确的,并检查项目的大小。 – sivaprakash

+0

数据没有问题。 –

+0

也许数据不会传递给数组列表。你尝试过adapter.notifyItemInserted(arraylistsize) – sivaprakash

回答

0

取消你的ListView

adapter.notifyDataSetChanged(); 
listView.invalidate(); 
+0

不,没有工作。无论是'invalidate()'还是'invalidateViews()' –

+0

都不可以发布源代码 – sasikumar

0

我猜的数据不被传递,当你试图向适配器通知数据集已更改。你可以在你将数据添加到你的数据列表的地方发布整个班级代码吗? 另一件事是尝试在适配器中使用“ViewHolder”类来获取视图。

0

我发现了这个问题。

更新后的项目在Adapter.getView()函数的早期导致异常,原因是缺少其他数据。因此,该函数的其余部分没有被调用并将内容留空。

解决方案是不仅更新适配器的列表,而且更新适配器所需的所有附加数据。

+0

一切顺利:P – lelloman