gpt4 book ai didi

android - 如何在 Android 中获取 Adapter 中最后一个可见项的位置

转载 作者:行者123 更新时间:2023-11-29 14:49:41 25 4
gpt4 key购买 nike

我打算为每个可见 行创建一个具有不同布局的 ListView 。我还设置了 setStackFromBottom(true)

我知道我可以在 View getView(int position, View convertView, ViewGroup parent) 中使用 int getItemViewType(int position) 但它使用固定位置而不是基于在可见位置上。

我想使用 ListView ,如下面的概念所示:

listview order

如果我向下滚动,下一项应该会替换上一项并使用其大布局。我尝试使用以下代码,但它使用固定位置,因此列表中的最后一项总是最大的,而不是最后可见的项目

 @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com