【发布时间】:2014-10-15 19:58:22
【问题描述】:
我目前正在创建一个活动,您可以在其中从列表中选择用户并通过键入他们的一部分姓名来过滤他们。我正在使用自定义 ArrayAdapter,输入来自 UserSelect 类(int id、字符串名称、选择的布尔值)。
我目前的问题是我在方法 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>();
【问题讨论】:
-
调试类名:)
Log.d("Daemun", "filterResults.values class = " + filterResults.values.getClass().getName());
标签: java android android-arrayadapter