为了账号安全,请及时绑定邮箱和手机立即绑定

ExpandableListview :想在每个组下添加子列表延迟加载

ExpandableListview :想在每个组下添加子列表延迟加载

慕尼黑的夜晚无繁华 2022-07-14 10:37:54
我已经实现了 expandablelistview 并且工作正常。现在我想在每个子列表的末尾添加“加载更多”按钮,这样如果用户单击它,它将从服务器获取更多项目。无论如何要这样做,因为在搜索了很多之后我找不到任何东西。非常感谢任何指导。这是我的自定义适配器:public class ExpandableListAdapterAssets extends BaseExpandableListAdapter implements Filterable {List<View> groupViews;ItemFilter mFilter;boolean showCheckBox;ArrayList<Asset> assetsToClaim;private Context _context;private List<AssetCategory> _listDataHeader; // header titles// child data in format of header title, child titleprivate HashMap<Integer, List<Asset>> _listDataChild;private RequestBackendHelper requestBackendHelper;public ExpandableListAdapterAssets(Context context, List<AssetCategory> listDataHeader,                                   HashMap<Integer, List<Asset>> listChildData, boolean b){    this._context = context;    this._listDataHeader = listDataHeader;    this._listDataChild = listChildData;    groupViews = new ArrayList<>();    showCheckBox = b;    assetsToClaim = new ArrayList<>();}@Overridepublic Asset getChild(int groupPosition, int childPosition){    return this._listDataChild.get(this._listDataHeader.get(groupPosition).getId())            .get(childPosition);}public List<Asset> getChildList(int groupPosition){    return this._listDataChild.get(this._listDataHeader.get(groupPosition).getId());}@Overridepublic long getChildId(int groupPosition, int childPosition){    return childPosition;}@Overridepublic View getChildView(final int groupPosition, final int childPosition,                         boolean isLastChild, View convertView, ViewGroup parent){    final Asset assetChild = getChild(groupPosition, childPosition);    if (convertView == null)    {        LayoutInflater infalInflater = (LayoutInflater) this._context                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);        convertView = infalInflater.inflate(R.layout.list_item, null);    }    TextView assetName = (TextView) convertView            .findViewById(R.id.txt_asset_name);    assetName.setText(assetChild.getName());
查看完整描述

1 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

您需要插入带有自定义的“加载更多”按钮BaseExpandableAdapter。这个答案似乎是相关的,因为它展示了如何提供两种不同类型的子视图。棘手的是,当单击“加载更多”按钮时,必须将其删除,然后需要将新项目与底部的新“加载更多”按钮连接在一起 - 然后是子适配器需要通知。它必须表现得像一个虚拟列表项,其中getChildView()提供当前的childPosition.

刚刚看到提供的代码;使用 Volley,您很可能需要在第一次加载时少获取一个项目,这样适配器就不会由于添加了一个额外的虚拟项目而失去同步 - 或者至少在最后添加视图类型 2在将网络请求添加到适配器之前。另一种选择可能是让getChildCount()回报少一个;在分页时必须注意每种情况下的这个附加项目。


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信