我正在开发一个包含一个可扩展列表视图的Android应用程序,用于从Web服务加载数据,但我不想在启动时加载整个数据,而是先加载父列表,然后单击父列表,然后展开列表子项的特定列表项查看加载该特定项目的子项目,那么首先可以吗?

谢谢

最佳答案

我不确定您的问题是什么意思,但是如果您想要的是在BaseExpandableListAdapter中动态加载子项,例如当您单击相关的组标题(如下所示)时加载“子项”,我有解决方案。

v Group header 1
| -- Child item 1
| -- Child item 2
v Group header 2
| -- Child item 1
| -- Child item 2

In your Activity, find your ExpandableListView like this:

ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandable_list_view);


然后添加一个侦听器以检查组单击:

expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener()
{
    @Override
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id)
    {
        if (expandableListView.isGroupExpanded(groupPosition))
            expandableListView.collapseGroup(groupPosition);
        else
            new BackgroundTask(groupPosition).execute();

        return true;
    }
});


如果返回true,则将“消耗”该点击,并在您单击该组时停止默认扩展。这就是为什么在您的ASyncTask中,您需要手动对其进行扩展。如果返回false,则列表视图将在GUI中自动展开,直到折叠并重新展开组后,您才会看到后台计算的结果。

在我的代码中,我有一个SparseBooleanArray来跟踪是否已经为给定组设置了数据,然后在onGroupClick()方法中检查了该值。我这样做是为了使数据在组扩展时只需要加载一次,但是很显然,如果您希望在每次扩展中更改数据,则不希望这样做。您的问题相当模糊,因此我不确定您使用的确切情况是什么。

private class BackgroundTask extends AsyncTask<Void, Void, List<ReturnType>>
{
    int groupPosition;

    private BackgroundTask(int groupPosition)
    {
        this.groupPosition = groupPosition;
    }

    @Override
    protected List<ReturnType> doInBackground(String... params)
    {
        // TODO: Do your background computation...
        // Then return it
    }

    @Override
    protected void onPostExecute(List<ReturnType> resultsList)
    {
        super.onPostExecute(resultsList);

        // TODO: Add the resultsList to whatever structure you're using to store the data in the ListView Adapter
        expandableListView.expandGroup(groupPosition);
    }
}


我不确定这是否是最好的方法,但是它确实对我有用。

关于android - 如何在Android中的父项可展开 ListView 上动态添加onClick的子项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40447637/

10-12 03:13