Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用HashMap在ExpandableListView中实现过滤器_Java_Android_Expandablelistview - Fatal编程技术网

Java 如何使用HashMap在ExpandableListView中实现过滤器

Java 如何使用HashMap在ExpandableListView中实现过滤器,java,android,expandablelistview,Java,Android,Expandablelistview,所以,我看到了一个例子,如果我正在为可扩展列表视图初始化两个数组,那么这个例子可以解决这个问题,但是在我的例子中,我有一个数组用于头数据,一个字符串用于子数据,这两个数组都存储在HashMap中。举一个例子。我怎样才能做到这一点 更新 我已经向适配器添加了一个新的过滤器,但由于某些原因,我并没有得到任何数据,甚至并没有得到一个错误。我做错了什么 public class SearchExpadanbleAdapter extends BaseExpandableListAdapter

所以,我看到了一个例子,如果我正在为可扩展列表视图初始化两个数组,那么这个例子可以解决这个问题,但是在我的例子中,我有一个数组用于头数据,一个字符串用于子数据,这两个数组都存储在HashMap中。举一个例子。我怎样才能做到这一点

更新

我已经向适配器添加了一个新的过滤器,但由于某些原因,我并没有得到任何数据,甚至并没有得到一个错误。我做错了什么

public class SearchExpadanbleAdapter extends BaseExpandableListAdapter
                    implements Filterable {
private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;

public SearchExpadanbleAdapter(Context context, List<String> listDataHeader,
                             HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
    String headerTitle = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.suggest_item_header, null);
    }

    TextView lblListHeader = (TextView) convertView
            .findViewById(R.id.text_header);
    lblListHeader.setText(headerTitle);

    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup viewGroup) {
    final String childText = (String) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.suggest_item, null);
    }

    TextView txtListChild = (TextView) convertView
            .findViewById(R.id.suggestion_text);

    txtListChild.setText(childText);
    return convertView;
}

@Override
public boolean isChildSelectable(int i, int i1) {
    return true;
}

public void notifyDataSetInvalidated() {
    super.notifyDataSetInvalidated();
}

@Override
public Filter getFilter() {
    Filter filter = new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults filterResults = new FilterResults();
            if (!TextUtils.isEmpty(constraint)) {

                // Retrieve the autocomplete results.
                Map<String, List<String>> searchData = new HashMap<>();

                for (Map.Entry<String, List<String>> map : _listDataChild.entrySet()) {
                    if (map.getKey().toLowerCase().startsWith(constraint.toString().toLowerCase())) {
                        _listDataHeader.add(map.getKey());
                        searchData.put(map.getKey(), map.getValue());
                    }
                }

                // Assign the data to the FilterResults
                filterResults.values = searchData;
                filterResults.count = searchData.size();
            }
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if (results.values != null) {
                _listDataChild = (HashMap<String, List<String>>) results.values;
                notifyDataSetChanged();
            }
        }
    };
    return filter;
}
公共类SearchExpadanbleAdapter扩展了BaseExpandableListAdapter
可过滤的{
私人语境(private Context)(私人语境);;
私有列表_listDataHeader;//头标题
//标题标题、子标题格式的子数据
私有HashMap_listDataChild;
public SearchExpadanbleAdapter(上下文、列表数据头、,
HashMap listChildData){
这._context=context;
这。_listDataHeader=listDataHeader;
这。_listDataChild=listChildData;
}
@凌驾
public int getGroupCount(){
返回此值。_listDataHeader.size();
}
@凌驾
公共整数getChildrenCount(整数组位置){
返回此。_listDataChild.get(此。_listDataHeader.get(groupPosition))
.size();
}
@凌驾
公共对象getGroup(int-groupPosition){
返回此。\u listDataHeader.get(groupPosition);
}
@凌驾
公共对象getChild(int-groupPosition、int-ChildPosition){
返回此。_listDataChild.get(此。_listDataHeader.get(groupPosition))
.get(childpositionon);
}
@凌驾
公共长getGroupId(int-groupPosition){
返回组位置;
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共视图getGroupView(int-groupPosition、布尔值isExpanded、视图转换视图、视图组视图组){
字符串头文件=(字符串)getGroup(groupPosition);
if(convertView==null){
LayoutInflater infalInflater=(LayoutInflater)this.\u上下文
.getSystemService(上下文布局\充气机\服务);
convertView=infalInflater.充气(R.layout.suggest\u item\u header,空);
}
TextView lblistheader=(TextView)convertView
.findViewById(R.id.text_标题);
lblListHeader.setText(标题);
返回视图;
}
@凌驾
公共视图getChildView(int-groupPosition、int-childPosition、boolean-isLastChild、View-convertView、ViewGroup-ViewGroup){
最终字符串childText=(字符串)getChild(groupPosition,childPosition);
if(convertView==null){
LayoutInflater infalInflater=(LayoutInflater)this.\u上下文
.getSystemService(上下文布局\充气机\服务);
convertView=infalInflater.充气(R.layout.suggest_项,空);
}
TextView txtListChild=(TextView)convertView
.findviewbyd(R.id.suggestion\u text);
setText(childText);
返回视图;
}
@凌驾
公共布尔值是可选择的(int i,int i1){
返回true;
}
public void notifyDataSetionValidated(){
super.notifyDataSetionValidated();
}
@凌驾
公共过滤器getFilter(){
过滤器过滤器=新过滤器(){
@凌驾
受保护的筛选器结果性能筛选(CharSequence约束){
FilterResults FilterResults=新的FilterResults();
如果(!TextUtils.isEmpty(约束)){
//检索自动完成结果。
Map searchData=newhashmap();
对于(Map.Entry映射:\ u listDataChild.entrySet()){
if(map.getKey().toLowerCase().startsWith(constraint.toString().toLowerCase())){
_添加(map.getKey());
searchData.put(map.getKey(),map.getValue());
}
}
//将数据分配给FilterResults
filterResults.values=搜索数据;
filterResults.count=searchData.size();
}
返回过滤器结果;
}
@凌驾
受保护的void publishResults(CharSequence约束、FilterResults结果){
如果(results.values!=null){
_listDataChild=(HashMap)results.values;
notifyDataSetChanged();
}
}
};
回流过滤器;
}

首先要创建一个副本列表,并在副本列表中创建一个副本,然后在发布结果后定义主列表

public class SearchExpadanbleAdapter extends BaseExpandableListAdapter
    implements Filterable {
private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;
private HashMap<String, List<String>> _listDataChildCopy;

public SearchExpadanbleAdapter(Context context, List<String> listDataHeader,
                               HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
    _listDataChildCopy.addAll(_listChildData);
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public int getChildrenCount(int groupPosition) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
    String headerTitle = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.suggest_item_header, null);
    }

    TextView lblListHeader = (TextView) convertView
            .findViewById(R.id.text_header);
    lblListHeader.setText(headerTitle);

    return convertView;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup viewGroup) {
    final String childText = (String) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.suggest_item, null);
    }

    TextView txtListChild = (TextView) convertView
            .findViewById(R.id.suggestion_text);

    txtListChild.setText(childText);
    return convertView;
}

@Override
public boolean isChildSelectable(int i, int i1) {
    return true;
}

public void notifyDataSetInvalidated() {
    super.notifyDataSetInvalidated();
}

@Override
public Filter getFilter() {
    if (mFilter == null) {
        mFilter = new ItemFilter();
    }
    return mFilter;
}

private class ItemFilter extends Filter {

    protected FilterResults performFiltering(CharSequence constraint) {

        FilterResults results = new FilterResults();
        if (constraint != null && constraint.length() > 0) {
            HashMap<String, List<String>> filterList = new HashMap<>();

            for (int i = 0; i < _listDataChildCopy.size(); i++) {
                if ((_listDataChildCopy.get(i).getName().toUpperCase())
                        .contains(constraint.toString().toUpperCase())) {
                    ObjectName name = _listDataChildCopy.get(i);
                    filterList.add(peopleName);
                }
            }
            results.count = filterList.size();
            results.values = filterList;

        } else {
            results.count = _listDataChildCopy.size();
            results.values = _listDataChildCopy;
        }
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {

        _listDataChild = (HashMap<String, List<String>>) results.values;

        notifyDataSetChanged();
    }
}
公共类SearchExpadanbleAdapter扩展了BaseExpandableListAdapter
可过滤的{
私人语境(private Context)(私人语境);;
私有列表_listDataHeader;//头标题
//标题标题、子标题格式的子数据
私有HashMap_listDataChild;
私有HashMap_listDataChildCopy;
public SearchExpadanbleAdapter(上下文、列表数据头、,
HashMap listChildData){
这._context=context;
这。_listDataHeader=listDataHeader;
这。_listDataChild=listChildData;
_addAll(_listChildData);
}
@凌驾
public int getGroupCount(){
返回此值。_listDataHeader.size();
}
@凌驾
公共整数getChildrenCount(整数组位置){
返回此。_listDataChild.get(此。_listDataHeader.get(groupPosition))
.size();
}
@凌驾
公共对象getGroup(int-groupPosition){
返回此。\u listDataHeader.get(groupPosition);
}
@凌驾
公共对象getChild(int-groupPosition、int-ChildPosition){
返回此。_listDataChild.get(此。_listDataHeader.get(groupPosition))
.get(childpositionon);
}
@凌驾
公共长getGroupId(int-groupPosition){
返回组位置;
}
@凌驾
公共长getChildId(int-groupPosition,int-childPosition){
返回子位置;
}
@凌驾
公共布尔表ID(){
返回false;
}
@凌驾
公共视图getGroupView(int-groupPosition、布尔值isExpanded、视图转换视图、视图组视图组){
圣