Note that there are some explanatory texts on larger screens.

plurals
  1. POExpandableListView determine when filter text is applied
    primarykey
    data
    text
    <p>My task is keep expanded/collapsed groups during filter. I write own filter, which remove group if group don't have any child left. But after groups is gone filter's text is changed and group come back, but it will be collapsed. </p> <p>So I save expand/collapse states to group objects. So I just need in right moment apply these states. </p> <p>There is my try:</p> <pre><code>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 &gt;= 0) if (adapter.getGroup(i).expanded) expandGroup(i); else collapseGroup(i); } } </code></pre> <p>but this don't work at all. method <strong>onFilterComplete</strong> is never called.</p> <p>I must find another way determine, when filter is apply before repainting.</p> <p>Maybe anyone know? Thanks.</p> <p><strong>Edit:</strong></p> <p><strong>My filter:</strong></p> <pre><code>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&lt;SubjectGroup&gt; groups = new ArrayList&lt;SubjectGroup&gt;(); 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 &gt; 0) groups.add(ng); } result.values = groups; return result; } @Override protected void publishResults(CharSequence s, FilterResults result) { adapter.filter((ArrayList&lt;SubjectGroup&gt;) result.values); } } </code></pre> <p>*<em>And method of adapter which accept filtered data *</em>: </p> <pre><code>protected void filter(ArrayList&lt;SubjectGroup&gt; groups) { this.groups = groups; notifyDataSetInvalidated(); } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload