귀하의 질문이 무엇을 의미하는지 확실히 모르겠지만 원하는 것이 BaseExpandableListAdapter에 하위 항목을 동적으로로드하는 것입니다. 관련 그룹 헤더 (아래)를 클릭하면 "하위 항목"을로드합니다. 해결책이 있습니다. 당신의 활동에
v Group header 1
| -- Child item 1
| -- Child item 2
v Group header 2
| -- Child item 1
| -- Child item 2
,이처럼 ExpandableListView를 찾을 수 :
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;
}
});
반환을 사실은 클릭 "소비"합니다 그룹을 클릭 할 때 그룹의 기본 확장을 중지하십시오. 그래서 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);
}
}
이것이 최선의 방법인지는 확실하지 않지만 확실하게 잘 작동합니다.
확실 : 어떤 어댑터를 사용하고 있습니까? 'CursorTreeAdapter'? – pskink
아니요, BaseExpandableListAdapter를 사용하고 있습니다. –
BaseExpandableListAdapter를 사용하면 더 많은 작업이 필요합니다. – pskink