AsyncTask完成后,在listview.setOnGroupClickListener中更新子数据

时间:2015-07-01 14:42:20

标签: android android-asynctask expandablelistview timing asynctaskloader

我是Android的新手,目前我遇到了一个我无法解决的问题。

我有一个 ExpandableListView ,其中包含一个扩展 BaseExpandableListAdapter 的自定义适配器。 启动 ExpandableListView 时,仅加载组数据。单击该组时会加载相应的子数据。

组数据包含一个对象。当我点击一个组时,我得到了组对象的ID。然后我将此ID传递给数据库过程。然后,数据库过程返回该特定组的相应子数据。我在 AsyncTask 中执行此数据库调用。

对于点击,我使用 ExpandableListView.OnGroupClickListener

这是我的问题:

当我执行单击时,该组会在数据库过程返回子数据之前展开。当我在第一次展开它之后立即折叠该组,然后再次展开它时,将显示子数据。 基本上我发现的是,存在时间问题。 在扩展组之前,AsyncTask未完成。

我最喜欢的解决方案:

在从数据库过程返回子数据之前,不应该扩展组(因此,当AsyncTask执行其工作时,基本上不应该扩展组)。 或者,在AsyncTask完成后,组应自动刷新,不会折叠,并显示子数据。

这是我的代码:

onclick事件!

lv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

    selected = (DoitService) lv.getExpandableListAdapter().getGroup(groupPosition);
    servId = selected.getServiceIdService();
    if (!isConnected) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getParentActivity());

        // set title
        alertDialogBuilder.setTitle("MyApp");
        alertDialogBuilder.setMessage("Your Internet Connection is not sufficient to perform this task ")
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
    } else {


        AsyncCallIndividualService asyncCallIndividualService = new AsyncCallIndividualService();
        asyncCallIndividualService.execute(servId);

    }

    return false;
}
});

AsyncCallIndividualService的onPostExecute代码(m1String是数据库过程返回的新子数据):

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        List<String> childData = new ArrayList<String>();
               childData.add(m1String);
               Log.d("m1String on Expand: ", m1String);
        // Add children as an array to the HashMap
              ExpandableServiceListAdapter. _listDataChild.put(selected, childData);

    }


}

PS:我已经尝试了 BaseExpandableListAdapter 中的 onGroupExpanded 方法。我遇到了同样的问题。

我真的很感激每一个帮助! 感谢

0 个答案:

没有答案