我当前正在创建一个 Activity ,您可以在其中从列表中选择用户并通过键入其姓名的一部分来过滤他们。我正在使用自定义 ArrayAdapter,其输入来自 UserSelect 类(int id、字符串名称、选择的 boolean 值)。
我当前的问题是我在方法publishResults中遇到了ClassCastException,并且在这一行中更具体:
users = (ArrayList<UserSelect>)filterResults.values;
知道如何解决这个问题吗?以前我使用过 string[] 并且有效,但由于我需要对象的 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();
}
};
}
}
解决方案(感谢 Elltz): 我改变了:
List<String> filterResultsData = new ArrayList<String>();
至:
List<UserSelect> filterResultsData = new ArrayList<UserSelect>();
最佳答案
从另一个不同的标签检查我的答案 question
你的问题是你的数组列表是一个字符串泛型类型,你将它转换为
filterResults.values
我认为这是一个
UserSelect object
所以将你的数组列表更改为
<UserSelect>
关于java - Android - 自定义 ArrayAdapter 中的publishResults 方法中的 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26381579/