在notifyDataSetChanged()之后自定义适配器大小0

时间:2017-02-13 15:34:17

标签: android listview adapter android-arrayadapter custom-adapter

我有一个ListView,一个ArrayList和一个扩展ArrayAdapter的MaterielAdapter。我的问题是调用notifyDataSetChanged()不会更新我的ListView ...我花了3个小时在SO上尝试所有类似的问题,但没有一个对我有效。

<script> var pixeldata = <?php echo json_encode($pixel, JSON_HEX_TAG); ?>;
</script>

我的收藏包含所有对象,但listview永远不会刷新,也不是适配器......

3 个答案:

答案 0 :(得分:1)

您可能甚至没有将ListView添加到活动视图中。我建议您在布局xml中定义listview,而不是使用新的Listview(this) 类似的东西:

 <ListView
     android:id="@+id/listview"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"/>

然后在你的活动中:

lvObjects = (ListView) findViewById(R.id.listview);

答案 1 :(得分:1)

找到解决方案

我的问题是我在将ArrayList设置为另一个ArrayList

materiels = getMateriels() // getMateriels() returns an ArrayList<Materiel>

似乎在列表中设置一个新对象不起作用,我最终做的是以下内容:

materiels.clear();
materiels.addAll(getMateriels());

顺便说一句,对于那些需要在ListView中有标题的人来说,你必须这样做:

((YourAdapter)((HeaderViewListAdapter)yourListView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();

答案 2 :(得分:0)

存放您的适配器,您的适配器也将是您的列表。

MaterialAdapter adapter = new MaterialAdapter(this, 
R.layout.object_line);

lvObjects = new ListView(this);
lvObjects.setAdapter(adapter);
...
adapter.add(new Object());
adapter.notifyDataSetChanged();

Currenlty你的适配器,不知道他需要使用你在参数中传递的列表。但是你扩展了ArrayAdapter,这意味着你的适配器是一个列表。