image.png
為listView 添加點擊事件:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//xxxxxxxxxxxxx
}
});
這邊會有問題 通過position獲取數(shù)據(jù)時期犬,由于 搜索框的過濾條件 整個position的范圍實際是縮小過了 很難通過position獲取選中的值
這邊通過適配器獲取選中的值
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = (String)arrayAdapter.getItem(position);
//將值填到對應(yīng)的控件去
//TextView.setText(item);
dialog.dismiss();
}
});
數(shù)據(jù)只是簡單的String,如果要實現(xiàn)ListView更復(fù)雜的功能。
這邊需要自定義適配器:
適配器需要重寫 過濾方法 新建MyFilter 重寫 過濾方法
public class SelectMultiChoicelAdapter extends ArrayAdapter<AffirmInfoBean.DataBean.UserListBean> {
private Context mContext;
private int mResource;
private List<AffirmInfoBean.DataBean.UserListBean> mData;
private MyFilter mFilter;
ArrayList<AffirmInfoBean.DataBean.UserListBean> mOriginalValues;
public SelectMultiChoicelAdapter(Context context, int resource, List<AffirmInfoBean.DataBean.UserListBean> objects) {
//這里會將object賦值給父類的mObjects成員變量级遭,問題的所在
super(context, resource, objects);
this.mContext = context;
this.mResource = resource;
this.mData = objects;
}
@Override
public int getCount() {
return mData.size();
}
@Nullable
@Override
public AffirmInfoBean.DataBean.UserListBean getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view;
if (convertView == null) {
view = LayoutInflater.from(mContext).inflate(mResource, parent, false);
} else {
view = convertView;
}
CheckBox checkBox =(CheckBox) view.findViewById(R.id.cb_item);
TextView text = (TextView) view.findViewById(R.id.tv_item);
checkBox.setChecked(mData.get(position).getIsChecked());
text.setText(mData.get(position).getText());
return view;
}
@NonNull
@Override
public Filter getFilter() {
if (mFilter == null) {
mFilter = new MyFilter();
}
return mFilter;
}
private class MyFilter extends Filter {
@Override
//過濾數(shù)據(jù)
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
//為null疲憋,表示沒有賦值過,這里的邏輯是mOriginalValues保存原始數(shù)據(jù)凿渊,而mData保存過濾后的數(shù)據(jù)
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<>(mData);
}
if (TextUtils.isEmpty(filterString)) {
results.values = mOriginalValues;
results.count = mOriginalValues.size();
} else {
List<AffirmInfoBean.DataBean.UserListBean> values = new ArrayList<>(mOriginalValues);
List<AffirmInfoBean.DataBean.UserListBean> newValues = new ArrayList<>();
for (int i = 0; i < values.size(); i++) {
AffirmInfoBean.DataBean.UserListBean value = values.get(i);
if (value.getText().contains(filterString)) {
newValues.add(value);
}
}
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
//mData.clear();
//mData.addAll((List<String>)results.values);
//noinspection unchecked
mData = (List<AffirmInfoBean.DataBean.UserListBean>) results.values;
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}