0

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

2 Answers 2

1

this is a problem

@Override
public Object getItem(int position) {
    return data.get(position);
}

correct answer is

 @Override
 public Bank getItem(int position) {
 return data.get(position);
    }

Bank bank = bankNameAdapter.getItem(position);

working perfect. i solved myself

Sign up to request clarification or add additional context in comments.

Comments

0

in your on itemclick replace your

Bank bank = bankList.get(position);

with

 Bank bank = (Bank)parent.getItemAtPosition(position);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.