I am having a ListView and I have inserted values using BaseAdapter. this is a my BaseAdapter's source code
private class BankNameAdapter extends BaseAdapter {
Context activity;
int layoutResourceId;
Bank bank;
private List<Bank> data;
private List<Bank> orig;
UserHolder holder = null;
public BankNameAdapter(Context context, int layoutResourceId, List<Bank> data) {
this.layoutResourceId = layoutResourceId;
this.activity = context;
this.data = data;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = LayoutInflater.from(activity);
holder = new UserHolder();
row = inflater.inflate(layoutResourceId, parent, false);
holder.PersonType = (TextView) row.findViewById(R.id.spinner_tittle);
row.setTag(holder);
} else {
holder = (UserHolder) row.getTag();
}
bank = data.get(position);
holder.PersonType.setText(bank.getBank());
return row;
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
final FilterResults oReturn = new FilterResults();
final ArrayList<Bank> results = new ArrayList<>();
if (orig == null)
orig = data;
if (constraint != null) {
if (orig != null && orig.size() > 0) {
for (final Bank uBanks : orig) {
if (uBanks.getBank().toLowerCase()
.contains(constraint.toString()))
results.add(uBanks);
}
}
oReturn.values = results;
}
return oReturn;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
data = (ArrayList<Bank>) results.values;
notifyDataSetChanged();
}
};
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return data.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
class UserHolder {
public TextView PersonType;
}
}
in Edittext's addTextChangedListener method i try to search values by names.search working perfect but when i clicked items,from item selected,selected always first iteam for example i have ['one',two',three'four'] elements in arraylist and if i search 'four'(in listview i can show only 'four') but when i click selected item resutl is 'one' always first elements in my arraylist i have no idea what is a wrong in my code
private void ShowDialogWithHeader(String header) {
final Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.view_show_register_dialog);
popapListview = (ListView) dialog.findViewById(R.id.registerPopapList);
final EditText searchCountry = (EditText) dialog.findViewById(R.id.dialog_Search_Country);
final TextView headerTxt = (TextView) dialog.findViewById(R.id.register_popap_header_txt);
if (cashBanks != null) {
bankList = Arrays.asList(cashBanks);
bankNameAdapter = new BankNameAdapter(getActivity(), R.layout.spinner_category_adapter, bankList);
popapListview.setAdapter(bankNameAdapter);
}
headerTxt.setText(header);
popapListview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Bank bank = bankList.get(position);
mSelectedBank = bank;
mBank.setText(bank.getBank());
mBankCode.setText(bank.getBankcode());
dialog.dismiss();
}
});
searchCountry.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Text [" + s + "]");
bankNameAdapter.getFilter().filter(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
dialog.show();
}
this is a my code if anyone knows solutions please add me thanks everyone