【发布时间】:2013-07-30 17:13:50
【问题描述】:
我遇到的问题是listView.getLastVisiblePosition 总是返回-1,所以我无法隐藏searchView。我在设置adapter 后立即检查了这个,我试图把它放在任何地方它仍然返回-1。我在Docs 中没有看到为什么会这样,但我想如果ListView 没有显示任何项目,它会返回-1。但是,listView.getFirstVisiblePosition() 始终返回 0,即使显示的项目不止一项。
Here 这两种方法我都试过了,但在获取错误值时并没有什么不同。
@SuppressLint("NewApi") private void setFilters(String curType, Object curFilter)
{
// initialize several lists
itemsAdapter = new ArrayAdapter<Rowdata>(this, R.layout.list_item_text, foodItems);
listView.setAdapter(itemsAdapter);
int numItems = listView.getLastVisiblePosition() - listView.getFirstVisiblePosition();
if (numItems > foodItems.length)
{ searchField.setVisibility(View.GONE); }
else
{ searchField.setVisibility(View.VISIBLE); }
}
只要按下Button 或更改可以过滤列表的文本,就会调用此方法。所以问题是为什么listView.getLastVisiblePosition() 总是返回-1,为什么listView.getFirstVisiblePosition() 总是返回0?没有错误/异常,除了没有得到预期的结果外,一切都运行良好。注意:itemsAdapter.getCount() 返回正确的值。
还有,我要支持API >=10
编辑
如果有人需要澄清,请告诉我。但基本上,我有一个 EditText 用来搜索列表。当列表中的项目不超过屏幕上的项目时,我想隐藏它。 listView.getLastVisiblePosition() 总是返回 -1
我真的很想知道原始问题的原因,但是如果有人有更好的方法在项目都适合屏幕时隐藏搜索框,我愿意接受建议。
更新
我在onItemClick() 中设置了一个断点,在那里我得到了getFirstVisiblePosition()、getLastVisiblePosition() 和listView.getChildCount() 的正确值。在此之前,我分别得到 0、-1 和 null。
【问题讨论】:
-
我真的不知道我是否完全理解这个问题。您有一个列表视图,其中包含可以通过 getCount() 获得的项目计数。在这个 listView 里面你有一个你想要得到的 searchView 是吗? searchView 是否有任何 id 分配给它?
-
@MateuszZając 我希望
listView.getLastVisiblePosition()返回View中最后一个View中的索引ListView所以如果它小于或等于我不使用的列表大小'不显示搜索栏。我希望这能解决一些问题。 -
绘制之前不知道。尝试通过
listView.post()发布一个可运行文件,看看你是否在那里得到了正确的值。 -
只是一个reference
-
@zapl 谢谢,做到了。现在,如果有人可以向我解释为什么这有效,我可以发出赏金。也许我不像我想的那样理解Runnable。但我不明白为什么它知道这里的计数但不是没有
Runnable。如果它在这里绘制,那么不应该在没有 `Runnable 的情况下绘制它吗?
标签: android android-listview android-search