猿问

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

我已经实现了 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 title

private 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<>();

}


@Override

public 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());

}


@Override

public long getChildId(int groupPosition, int childPosition)

{

    return childPosition;

}


@Override

public 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());


慕尼黑的夜晚无繁华
浏览 112回答 1
1回答

慕斯王

您需要插入带有自定义的“加载更多”按钮BaseExpandableAdapter。这个答案似乎是相关的,因为它展示了如何提供两种不同类型的子视图。棘手的是,当单击“加载更多”按钮时,必须将其删除,然后需要将新项目与底部的新“加载更多”按钮连接在一起 - 然后是子适配器需要通知。它必须表现得像一个虚拟列表项,其中getChildView()提供当前的childPosition.刚刚看到提供的代码;使用 Volley,您很可能需要在第一次加载时少获取一个项目,这样适配器就不会由于添加了一个额外的虚拟项目而失去同步 - 或者至少在最后添加视图类型 2在将网络请求添加到适配器之前。另一种选择可能是让getChildCount()回报少一个;在分页时必须注意每种情况下的这个附加项目。
随时随地看视频慕课网APP

相关分类

Java
我要回答