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