我試圖實現使用自定義對象適配器的ListView的篩選,但找不到任何有用的示例。包含的代碼非常簡化,所以請記住,我不能使用常規的ArrayAdapter。 我有一個EditText在ListView上方,當用戶在EditText小部件中輸入文本時,我想通過EditText中寫入的文本過濾ListView。 任何建議將不勝感激!使用自定義(對象)適配器篩選ListView
這裏是從活動類中的片段:
public class management_objects extends Activity {
private static List<User> UserList;
private EfficientAdapter adapter = null;
private ListView objectListView = null;
private EditText SearchText = null;
private static class EfficientAdapter extends BaseAdapter implements Filterable{
private LayoutInflater mInflater;
public EfficientAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return UserList.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.imagelayout_2lines, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.managementObjectText);
holder.subtext = (TextView) convertView.findViewById(R.id.managementObjectSubText);
holder.icon = (ImageView) convertView.findViewById(R.id.managementObjectIcon);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(UserList.get(position).getFirstName());
holder.subtext.setText(UserList.get(position).getLastName());
holder.icon.setImageResource(R.drawable.user);
return convertView;
}
static class ViewHolder {
TextView text;
TextView subtext;
ImageView icon;
}
@Override
public Filter getFilter() {
return null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adobjectlist);
Bundle extras = getIntent().getExtras();
SearchText = (EditText) findViewById(R.id.SearchBox);
SearchText.addTextChangedListener(filterTextWatcher);
objectListView = (ListView) findViewById(R.id.ObjectList);
objectListView.setOnItemClickListener(Item_Click);
adapter = new EfficientAdapter(this);
ComputerName = extras.getString("COMPUTER_NAME");
//Get User list from webservice
ShowUsers();
}
這裏是用戶等級:
public class User {
private int UserId;
private String FirstName;
private String LastName;
public int getUserId() {
return UserId;
}
public void setUserId(int UserId) {
this.UserId = UserId;
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String FirstName) {
this.FirstName = FirstName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String LastName) {
this.LastName = LastName;
}
}
爲什麼你說在3)「覆蓋」? BaseAdapter沒有getFilter()。 – Ixx 2012-05-02 11:31:02
良好的捕獲 - 不需要。我的自定義Adapter類(實際上是從AmazingListView開源小部件中的AmazingAdapter繼承而來)實現了需要getFilter()的android.widget.Filterable接口。 – DustinB 2012-05-03 14:56:29
[本教程](http://www.survivingwithandroid.com/2012/10/android-listview-custom-filter-and.html)幫助了我。答案有些不清楚,或者我沒有足夠的注意力去閱讀。 – Sufian 2013-03-26 10:53:53