내 작업은 필터 중에 확장/축소 그룹을 유지합니다. 그룹에 자식이없는 경우 그룹을 제거하는 필터를 작성합니다. 그러나 그룹이 사라지면 필터의 텍스트가 변경되고 그룹이 다시 돌아 오지만 축소됩니다.ExpandableListView 필터 텍스트 적용시기 결정
그래서 그룹 개체에 확장/축소 상태를 저장합니다. 그래서 나는 단지 적절한 순간에 이러한 상태를 적용 할 필요가 있습니다.
내 시도가 :
class SubjectGroupList extends ExpandableListView implements OnGroupCollapseListener, OnGroupExpandListener{
public SubjectGroupList(Context context) {
super(context);
}
public void onGroupExpand(int groupPos) {
SubjectGroup group = (SubjectGroup)getExpandableListAdapter().getGroup(groupPos);
group.expanded = true;
}
public void onGroupCollapse(int groupPos) {
SubjectGroup group = (SubjectGroup)getExpandableListAdapter().getGroup(groupPos);
group.expanded = false;
}
@Override
public void onFilterComplete(int count) {
fixCollapse();
super.onFilterComplete(count);
}
private void fixCollapse() {
Log.d("SubjectGroupList", "fix collapse");
SubjectGroupAdapter adapter = (SubjectGroupAdapter)getExpandableListAdapter();
int i = adapter.getGroupCount();
while (--i >= 0)
if (adapter.getGroup(i).expanded)
expandGroup(i);
else
collapseGroup(i);
}
}
하지만이 전혀 작동하지 않습니다. 메서드 onFilterComplete이 호출되지 않습니다.
다시 칠하기 전에 필터가 적용될 때 다른 방법을 찾아야합니다.
누구나 아시겠습니까? 감사.
편집 :
내 필터 :
class GroupFilter extends Filter {
private SubjectGroupAdapter adapter;
public GroupFilter(SubjectGroupAdapter adapter) {
this.adapter = adapter;
}
@Override
protected FilterResults performFiltering(CharSequence s) {
FilterResults result = new FilterResults();
result.count = 0;
ArrayList<SubjectGroup> groups = new ArrayList<SubjectGroup>();
s = s.toString().toLowerCase();
for (SubjectGroup group : adapter.ori) {
SubjectGroup ng = new SubjectGroup(group.name, group.id);
int founded = 0;
for (SubjectItem item : group) {
if (s == null || s.length() == 0 || item.name.toLowerCase().contains(s)) {
ng.add(new SubjectItem(item.name, item.id));
result.count++;
founded++;
}
}
if (founded > 0)
groups.add(ng);
}
result.values = groups;
return result;
}
@Override
protected void publishResults(CharSequence s, FilterResults result) {
adapter.filter((ArrayList<SubjectGroup>) result.values);
}
}
* 그리고 데이터 * 필터링 수락 어댑터 방법 : 나는 대답을 설립
protected void filter(ArrayList<SubjectGroup> groups) {
this.groups = groups;
notifyDataSetInvalidated();
}
필터를 어떻게 설정하고 설정을 해제합니까? – M2X
내 필터를 추가했습니다. 어쩌면, 어댑터에서 메소드를 호출 할 가능성이 있습니까? ExpandableListView는 펼치기/접기에 대한 모든 정보에 액세스 할 수 있지만 가장 적합한 시간을 찾아야합니다. – neworld