Java 自定义ArrayAdapter中publishResults方法中的Android-ClassCastException

Java 自定义ArrayAdapter中publishResults方法中的Android-ClassCastException,java,android,android-arrayadapter,Java,Android,Android Arrayadapter,我目前正在创建一个活动,您可以从列表中选择用户,并通过键入其名称的一部分对其进行筛选。我使用一个自定义的ArrayAdapter,其输入来自UserSelect类(int-id、String-name、boolean-selected) 我当前的问题是,我在方法publishResults中得到了一个ClassCastException,这一行更具体: users = (ArrayList<UserSelect>)filterResults.values; users=(Array

我目前正在创建一个活动,您可以从列表中选择用户,并通过键入其名称的一部分对其进行筛选。我使用一个自定义的ArrayAdapter,其输入来自UserSelect类(int-id、String-name、boolean-selected)

我当前的问题是,我在方法publishResults中得到了一个ClassCastException,这一行更具体:

users = (ArrayList<UserSelect>)filterResults.values;
users=(ArrayList)filterResults.values;
你知道怎么解决这个问题吗?以前我使用了字符串[],但由于我需要对象的id,所以现在将其更改为ArrayList

完整代码:

public class CCSelectAdapter extends ArrayAdapter<String> {

  private final Context context;
  private List<UserSelect> users = new ArrayList<UserSelect>();

  public CCSelectAdapter(Context context,  List<UserSelect> values) {
    super(context, R.layout.listview_cc_select);
    this.context = context;
    this.users = values;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.listview_cc_select, parent, false);
    TextView textView = (TextView) rowView.findViewById(R.id.ccName);
    textView.setText(users.get(position).getName());

    return rowView;
  }

  public int getCount() 
  {
    return users.size();
  }

  public String getItem(int position) 
  {
      return users.get(position).getName();
  }

  public long getItemId(int position) 
  {
      return position;
  }

  @Override
  public Filter getFilter()
  {
     return new Filter()
     {
          @Override
          protected FilterResults performFiltering(CharSequence charSequence)
          {
              FilterResults results = new FilterResults();

              if(charSequence == null || charSequence.length() == 0)
              {
                  results.values = users;
                  results.count = users.size();
              }
              else
              {
                  List<String> filterResultsData = new ArrayList<String>();

                  for (int i = 1 ; i < users.size() ; i++) {
                      if(users.get(i).getName().toLowerCase().contains(((String) charSequence).toLowerCase()))
                      {
                          filterResultsData.add(users.get(i).getName());
                      }
                  }

                  String[] arr = filterResultsData.toArray(new String[filterResultsData.size()]);

                  results.values = arr;
                  results.count = arr.length;
              }
              return results;
          }

          @Override
          protected void publishResults(CharSequence charSequence, FilterResults filterResults)
          {
            users = (ArrayList<UserSelect>)filterResults.values;
            notifyDataSetChanged();
          }
      };
  }

} 
公共类CCSelectAdapter扩展了ArrayAdapter{
私人最终语境;
private List users=new ArrayList();
公共CCSelectAdapter(上下文、列表值){
super(context,R.layout.listview\u cc\u select);
this.context=上下文;
这是用户=值;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
视图行视图=充气机。充气(R.layout.listview\u cc\u select,父项,false);
TextView TextView=(TextView)rowView.findViewById(R.id.ccName);
textView.setText(users.get(position.getName());
返回行视图;
}
public int getCount()
{
返回users.size();
}
公共字符串getItem(int位置)
{
返回users.get(position.getName();
}
公共长getItemId(int位置)
{
返回位置;
}
@凌驾
公共过滤器getFilter()
{
返回新筛选器()
{
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence)
{
FilterResults results=新的FilterResults();
if(charSequence==null | | charSequence.length()==0)
{
结果.价值=用户;
results.count=users.size();
}
其他的
{
List filterResultsData=new ArrayList();
对于(int i=1;i
解决方案(感谢Elltz): 我改变了:

List<String> filterResultsData = new ArrayList<String>();
List filterResultsData=new ArrayList();
致:

List filterResultsData=new ArrayList();

从另一个不同的标签检查我的答案

您的问题是arraylist是字符串泛型类型,您正在将其强制转换为

 filterResults.values
我认为这是一个

 UserSelect object
因此,将arraylist更改为

<UserSelect>

是传递给
publishResults
FilterResults
对象,即在
performFiltering
中构建的对象?如果是,请注意值字段的类型是
String[]
,而不是
ArrayList


强制转换运算符仅在基础对象实际具有该类型时才起作用。

调试类的名称:)
Log.d(“Daemun”、“filterResults.values class=“+filterResults.values.getClass().getName())太好了,它可以工作!现在我可以开始在我的代码中寻找其他bug了:-D
<UserSelect>