我知道这是一个老问题,Android 世界已经大多转向 RecyclerViews,但对于任何感兴趣的人,您可能会发现 this 库非常有趣。
它使用与 ListView 一起使用的 BaseAdapter 来检测列表何时滚动到最后一项或何时滚动离开最后一项。
它带有一个示例项目(仅 100 行 Activity 代码),可用于快速了解其工作原理。
简单用法:
class Boy{
private String name;
private double height;
private int age;
//Other code
}
存放 Boy 对象的适配器如下所示:
public class BoysAdapter extends EndlessAdapter<Boy>{
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent
.getContext());
holder = new ViewHolder();
convertView = inflater.inflate(
R.layout.list_cell, parent, false);
holder.nameView = convertView.findViewById(R.id.cell);
// minimize the default image.
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Boy boy = getItem(position);
try {
holder.nameView.setText(boy.getName());
///Other data rendering codes.
} catch (Exception e) {
e.printStackTrace();
}
return super.getView(position,convertView,parent);
}
注意 BoysAdapter 的 getView 方法如何返回对 EndlessAdapter 超类的 getView 方法的调用。这是 100% 必不可少的。
现在要创建适配器,请执行以下操作:
adapter = new ModelAdapter() {
@Override
public void onScrollToBottom(int bottomIndex, boolean moreItemsCouldBeAvailable) {
if (moreItemsCouldBeAvailable) {
makeYourServerCallForMoreItems();
} else {
if (loadMore.getVisibility() != View.VISIBLE) {
loadMore.setVisibility(View.VISIBLE);
}
}
}
@Override
public void onScrollAwayFromBottom(int currentIndex) {
loadMore.setVisibility(View.GONE);
}
@Override
public void onFinishedLoading(boolean moreItemsReceived) {
if (!moreItemsReceived) {
loadMore.setVisibility(View.VISIBLE);
}
}
};
loadMore 项目是一个按钮或其他 ui 元素,可以单击它以从 url 获取更多数据。
当按照代码中的描述放置时,适配器确切地知道何时显示该按钮以及何时禁用它。只需在您的 xml 中创建按钮并将其放置在上面的适配器代码中即可。
享受吧。