【问题标题】:listview.getfirstvisibleposition() and getlastvisibleposition() returning wrong values [duplicate]listview.getfirstvisibleposition() 和 getlastvisibleposition() 返回错误值 [重复]
【发布时间】:2015-03-09 20:43:26
【问题描述】:

我的一项活动中有一个列表视图。我想知道当前有多少项目对用户可见。所以我尝试了listview.getfirstvisiblepositionlistview.getlastvisibleposition。但它们分别返回 -1 和 0。

下面是我的相关代码。

listView = (ListView)rootView.findViewById(R.id.listView1);
//fill arrayList
listView.setAdapter(newProductAdapter(getActivity(),R.layout.activity_product_adapter, arrayList));
Log.d("first",String.valueOf(listView.getFirstVisiblePosition()));
Log.d("last",String.valueOf(listView.getLastVisiblePosition()));

第一个日志的结果是-1,第二个是0。 而在我的设备中,列表视图中显示了 4 个项目。 这里出了什么问题?

【问题讨论】:

  • 您只显示登录您的问题,同时发布您如何在代码中使用它
  • 对于 getFirstVisiblePosition(),您需要在 Adapter 中执行此操作,也许在 getView() 中。

标签: android android-listview android-adapter


【解决方案1】:

原因可能是因为您在 setAdapter() 方法之后使用了这些方法。

膨胀列表项总是需要一段时间,在膨胀完成之前,您可能会得到错误的结果。

您应该在特定事件上执行此操作,例如单击ListViewButton (OnClickListener) 或onScroll (OnScrollListenr)。


[编辑] 对于您在 cmets 中的查询,您可以覆盖 ActivityonPostResume 方法,然后您可以使用 getfirstvisiblepositiongetlastvisibleposition 方法:

在活动恢复完成时调用(在调用 onResume() 之后)。应用程序一般不会实现此方法;它旨在让系统类在应用程序恢复代码运行后进行最终设置。

派生类必须调用该方法的超类实现。如果不这样做,就会抛出异常。

【讨论】:

  • 我认为你是对的。但是,当第一次布局膨胀时,我怎么知道显示了多少行? .我的意思是在布局膨胀并设置列表视图之后不会有滚动事件。我希望我的问题很清楚
  • @Apsaliya ListView.getChildCount() 是您正在寻找的。抱歉,我仍然没有达到您想要实现的目标。
  • 活动创建时,列表视图布局将被膨胀。届时将有一些项目可见。我如何找到一些?之后,当用户滚动时,我可以通过滚动事件使用这些方法(getfirstvisibleposition),正如您之前指出的那样。但是第一次呢?我希望我现在清楚了。
  • @Apsaliya 查看更新后的答案。我相信这就是你所需要的。如果有帮助请点赞:)
  • 我同意SMR的帖子,需要在事件方法中进行。如果你这样做,那么你可能不需要 getFirstVisiblePosition() 因为监听器应该传递位置,并且你可以获得列表视图中的项目数。
猜你喜欢
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
  • 2023-03-30
相关资源
最近更新 更多