- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我打算为每个可见 行创建一个具有不同布局的 ListView 。我还设置了 setStackFromBottom(true)
。
我知道我可以在 View getView(int position, View convertView, ViewGroup parent)
中使用 int getItemViewType(int position)
但它使用固定位置而不是基于在可见位置上。
我想使用 ListView ,如下面的概念所示:
如果我向下滚动,下一项应该会替换上一项并使用其大布局。我尝试使用以下代码,但它使用固定位置,因此列表中的最后一项总是最大的,而不是最后可见的项目。
@Override
public int getItemViewType(int position)
{
if(position==values.length-1)
return 1;
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = null;
type=getItemViewType(position);
if (type == 0)
rowView = inflater.inflate(R.layout.list_item, parent, false);
else
rowView = inflater.inflate(R.layout.list_item2, parent, false);
return rowView;
}
我想,我应该获取 Adapter 中第一个和最后一个可见项的位置,但我不知道该怎么做。
我能否以某种方式创建遵循上述概念的 ListView ?我能得到正确的位置吗?
最佳答案
您可以通过在 ListView 上设置滚动监听器来获取大量信息:
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// firstVisibleItem + visibleItemCount = last item
}
}
但是,我想不出您可以如何有效地使用这些信息。即使您更改 getView() 以在其位置与最后一个项目相同时返回更大的 View ,您也无法在 View 向上移动时轻松调整 View 的大小,因为不会为已经显示的项目再次调用 getView() ,除非您重复调用适配器上的 notifyDataSetChanged(),否则会降低性能。
我的想法是在 ListView 下方添加另一个 View ,该 View 将为 ListView 中最后一个项目下方的项目显示更大的 View 。使其看起来像 ListView 中的最后一行。您可以在 onScroll() 方法中更改该 View 。
关于android - 如何在 Android 中获取 Adapter 中最后一个可见项的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22585143/
我是一名优秀的程序员,十分优秀!