过滤listview后没有得到结果

时间:2014-04-01 09:47:20

标签: android listview textwatcher

我只是创建了一个应用程序,我在其中获取与保存相同的联系人列表,数据未获得过滤器,我想获取用户在autocompletetextview中输入的数据,它与listview匹配并给出结果,但在这段代码中,我回到整个listview ..如何比较它,并只显示结果数据...... ??请给我一些线索。 的 MainActivity

  public class MainActivity extends Activity implements OnItemClickListener,
            OnItemSelectedListener {
        SearchView mSearchView;
        AutoCompleteTextView searchText;
        ArrayList<String> name1 = new ArrayList<String>();
        ArrayList<String> phno1 = new ArrayList<String>();
        ArrayList<String> phno0 = new ArrayList<String>();

        MyAdapter ma;


        String[] cellArray = null;


        String contacts;


        ListView lv;

        String phoneNumber, name;

        StringBuilder b = new StringBuilder();

        List<String> arrayListNames;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            getAllCallLogs(this.getContentResolver());
            searchText = (AutoCompleteTextView) findViewById(R.id.autocomplete);

            lv = (ListView) findViewById(R.id.lv);

            ma = new MyAdapter();

            searchText.setThreshold(1);
            searchText.setAdapter(ma);

            lv.setAdapter(ma);
            lv.setOnItemClickListener(this);
            lv.setItemsCanFocus(false);
            lv.setTextFilterEnabled(true);





        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {

            // TODO Auto-generated method stub
            getMenuInflater().inflate(R.menu.contact_main, menu);
            MenuItem searchItem = menu.findItem(R.id.action_search);

            return true;

        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // TODO Auto-generated method stub

            switch (item.getItemId()) {

            case android.R.id.home:
                StringBuilder checkedcontacts = new StringBuilder();
                System.out.println(".............." + ma.mCheckStates.size());
                for (int i = 0; i < name1.size(); i++)

                {
                    if (ma.mCheckStates.get(i) == true) {
                        // phno0.add(name1.get(i).toString());
                        phno0.add(phno1.get(i).toString());
                        checkedcontacts.append(name1.get(i).toString());
                        checkedcontacts.append("\n");

                    } else {
                        System.out.println("..Not Checked......"
                                + name1.get(i).toString());
                    }

                }

                Intent returnIntent = new Intent();
                returnIntent.putStringArrayListExtra("name", phno0);
                setResult(RESULT_OK, returnIntent);

                finish();

                break;


            case R.id.action_search:

                searchText.setVisibility(View.VISIBLE);
                //String text_To_search= searchText.getText().toString().trim();
                searchText.addTextChangedListener(new TextWatcher() {

                    public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub
                        //System.out.println(".............." + ma.mCheckStates.size());
                        for(int i=0;i<name1.size();i++){

                        if(searchText.getText().toString().trim().equals(name1.get(i).toString()))

                        ma.getFilter().filter(s);
                             /* //Toast.makeText(getApplication(), name1.get(i), Toast.LENGTH_LONG).show();
                            phno2.add(name1.get(i) + phno1.get(i));*/
                        }
                        //lv.setAdapter(ma);

                    }

                    @Override
                    public void afterTextChanged(Editable s) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void beforeTextChanged(CharSequence s, int start,
                            int count, int after) {
                        // TODO Auto-generated method stub

                    }

                });

                break;
            }
            return super.onOptionsItemSelected(item);
        }



        @Override
        public void onItemClick(AdapterView<?> adapterView, View view,
                int position, long id) {
            // TODO Auto-generated method stub



                ma.toggle(position);

    //
        }

        public void getAllCallLogs(ContentResolver cr) {
            mPeopleList.clear();
            Cursor phones = cr.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
                    null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
                            + " ASC");
            while (phones.moveToNext()) {
                phoneNumber = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                name = phones
                        .getString(phones
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

                System.out.println(phoneNumber);

                name1.add(name);
                phno1.add(phoneNumber);


            }

            phones.close();

        }

        class MyAdapter extends BaseAdapter implements  Filterable,
                CompoundButton.OnCheckedChangeListener {
            public SparseBooleanArray mCheckStates;
            // public ListFilter listFilter;
            LayoutInflater mInflater;
            TextView tv1, tv;
            CheckBox cb;

            MyAdapter() {
                mCheckStates = new SparseBooleanArray(name1.size());
                mInflater = (LayoutInflater) MainActivity.this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }









            @Override
            public View getView(final int position, View convertView,
                    ViewGroup parent) {
                // TODO Auto-generated method stub
                View vi = convertView;
                if (convertView == null)
                    vi = mInflater.inflate(R.layout.row, null);
                tv = (TextView) vi.findViewById(R.id.textView1);
                tv1 = (TextView) vi.findViewById(R.id.textView2);
                cb = (CheckBox) vi.findViewById(R.id.checkBox1);
                tv.setText(name1.get(position));
                tv1.setText(phno1.get(position));
                cb.setTag(position);

                cb.setChecked(mCheckStates.get(position, false));
                cb.setOnCheckedChangeListener(this);

                return vi;

            }

            public boolean isChecked(int position) {

                return mCheckStates.get(position, false);
            }

            public void setChecked(int position, boolean isChecked) {
                mCheckStates.put(position, isChecked);
            }

            public void toggle(int position) {
                setChecked(position, !isChecked(position));
            }

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub
                mCheckStates.put((Integer) buttonView.getTag(), isChecked);

            }



            @Override
            public Filter getFilter() {
                // TODO Auto-generated method stub
                Filter filter = new Filter() {

                    @SuppressWarnings("unchecked")
                    @Override
                    protected void publishResults(CharSequence constraint, FilterResults results) {

                        arrayListNames = (List<String>) results.values;
                        notifyDataSetChanged();
                    }

                    @Override
                    protected FilterResults performFiltering(CharSequence constraint) {

                        FilterResults results = new FilterResults();
                        ArrayList<String> FilteredArrayNames = new ArrayList<String>();

                        // perform your search here using the searchConstraint String.

                        constraint = searchText.getText().toString().toLowerCase();
                        for (int i = 0; i < name1.size(); i++) {
                            String dataNames = name1.get(i);
                            if (dataNames.toLowerCase().startsWith(constraint.toString()))  {
                                FilteredArrayNames.add(dataNames);
                            }
                        }

                        results.count = FilteredArrayNames.size();
                        results.values = FilteredArrayNames;
                        //Log.e("VALUES", results.values.toString());

                        return results;
                    }
                };

                return filter;
            }
        }
             }

1 个答案:

答案 0 :(得分:0)

您可以分两步完成:

建立可过滤的列表 - How to make a nice looking ListView filter on Android

create a search interface