【问题标题】:ListView Refresh causes update of header viewListView Refresh 导致标题视图更新
【发布时间】:2015-04-22 11:33:34
【问题描述】:

我有一个带有自定义适配器的简单列表视图。

使用AddHeaderView,我在ListView 的顶部添加了Map,但每当我刷新适配器时,地图就会闪烁。例如,当我在刷新之前/期间删除我的项目时,或者当我在刷新之后添加我的项目时。

这让我很困扰,因为我有很多动态更新,所以地图每隔 10 秒就会闪烁一次。

我在每次更新时都会刷新标记。我删除了它,但它仍然闪烁。我也尝试过重用适配器,但仍然没有运气..

有什么办法可以避免在列表视图中出现这种行为?

【问题讨论】:

  • 如果您的列表视图变化非常频繁,那么您应该将该地图添加到列表视图的正上方,而不是作为列表视图的标题。利用负边距来避免两个视图之间的任何分离
  • 我试过了,但我希望地图在我在列表中向下滚动时滚动.. :(
  • 那我会要求你把这两个放在一个滚动视图中并管理视图的滚动

标签: java c# android listview xamarin


【解决方案1】:

1.将滚动视图设为父视图

2.在滚动视图中添加地图和列表视图

在你的活动中使用这个方法

public static void getListViewSize(ListView myListView) {
        ListAdapter myListAdapter = myListView.getAdapter();
        if (myListAdapter == null) {
            //do nothing return null
            return;
        }
        //set listAdapter in loop for getting final size
        int totalHeight = 0;
        for (int size = 0; size < myListAdapter.getCount(); size++) {
            View listItem = myListAdapter.getView(size, null, myListView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
      //setting listview item in adapter
        ViewGroup.LayoutParams params = myListView.getLayoutParams();
        params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1));
        myListView.setLayoutParams(params);
    }
  1. 将 listview 对象作为上述方法的参数传递

【讨论】:

  • 这是公认的答案,但这存在巨大的性能问题,因为它计算视图高度并多次创建视图,而不是重复使用它们。所以开发者在使用它之前要小心。
猜你喜欢
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多