Многократная фильтрация ListView объектов с помощью Spinner по значению в объекте и с зависимостью поиска для spinner для Android - PullRequest
0 голосов
/ 22 ноября 2018

В моем проекте я создал объектный класс с именем Assure со многими значениями, например, с именем caissesec.Все assure отображаются в ListView и имеют набор caissesec Spinner в макете (с целью классификации assure s с соответствующими caissesec).я фильтрую с searchview для имени assure как сопоставить 2 фильтра?например, выберите caissesec (тип assure) в счетчике и выберите имя assure с поиском в существующем типе

код для моего адаптера:

public Filter getFilter() {     

    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            final FilterResults oReturn = new FilterResults();
            final ArrayList<Assure> results = new ArrayList<Assure>();
            if (orig == null)
                orig = (ArrayList<Assure>) mAssureList;
            if (constraint != null) {
                if (orig != null && orig.size() > 0) {
                    for (final Assure p : orig) {if((mAssureList.get(i).getNomprenom().toLowerCase().contains(constraint.toString())) || mAssureList.get(i).getNomprenom().toUpperCase().contains(constraint.toString()) ||(p.getCaissesec().contains(constraint.toString())) {results.add(p);
                        }
                    }

                oReturn.values = results;

            }
            return oReturn;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            mAssureList = (ArrayList<Assure>) results.values;
            notifyDataSetChanged();
        }
    };
}

        public void notifyDataSetChanged() {

            // either this or: orig = dataSet;
            //orig = null;
            super.notifyDataSetChanged();
        }   

ListAssure.java:

public class listassurecnam extends AppCompatActivity implements SearchView.OnQueryTextListener {

    ImageView sback;
    SearchView searchAssure;
    private ListView lvAssure;
    private ListAssureAdapter adapter;
    //private List<Patient> mPatientList;
    private DatabaseHelper mDBHelper;
    private ArrayList<Assure> mAssureList;
    //private ArrayList<Assure> orig;
    Spinner spinnerCaisse;
    String[] type_caisse = {"TOUS","CNSS","CNRPS"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_assurecnam);
        sback = (ImageView)findViewById(R.id.menub);
        searchAssure = (SearchView)findViewById(R.id.searchViewAssure);
        lvAssure = findViewById(R.id.listViewCnam);
        mDBHelper = DatabaseHelper.getInstance(this);
        mAssureList=new ArrayList<Assure>();
        //orig=new ArrayList<Assure>();
        spinnerCaisse = findViewById(R.id.spinnerCaisse);

        sback.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                Intent it = new Intent(listassurecnam.this,menu.class);
                startActivity(it);
            }
        });

        searchAssure = (SearchView) findViewById(R.id.searchViewAssure);
        ((EditText)((SearchView)findViewById(R.id.searchViewAssure)).findViewById(((SearchView)findViewById(R.id.searchViewAssure)).

        getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.rgb(170,170,170));
        ((EditText)((SearchView)findViewById(R.id.searchViewAssure)).findViewById(((SearchView)findViewById(R.id.searchViewAssure)).

        getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.rgb(225,225,225));

        //add header to listview
        LayoutInflater inflater = getLayoutInflater();
        ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listheadercnam, lvAssure, false);
        lvAssure.addHeaderView(header, null, false);

        //Get patient list in db when db exists
        mAssureList = (ArrayList<Assure>) mDBHelper.getListAssure();
        //Init adapter
        adapter = new ListAssureAdapter(this, mAssureList);


        // Save the ListView state (= includes scroll position) as a Parcelable
        Parcelable state = lvAssure.onSaveInstanceState();

        //Set adapter for listView
        lvAssure.setAdapter(adapter);

        //Filter list
        lvAssure.setTextFilterEnabled(true);
        setupSearchView();

        // Restore previous state (including selected item index and scroll position)
        lvAssure.onRestoreInstanceState(state);

        // Start Activity FichePatient with ClickListener
        lvAssure.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {

                int itemId = (int) adapter.getItemId(position-1);
                Assure assure = mAssureList.get(itemId);

                String id_cnam = assure.getIdcnam();
                String type_caiss = assure.getCaissesec();

                //String name_ass = assure.getNameAss();
                //String naiss_ass = assure.getDateNaissAss();

                Intent intent = new  Intent(listassurecnam.this,assurecnam.class);
                intent.putExtra("CARN",id_cnam);
                intent.putExtra("CARN2",type_caiss);

                startActivity(intent);
            }
        });

        final ArrayAdapter <String> spinnerAdapter =  new ArrayAdapter<String>(this,  android.R.layout.simple_spinner_item,type_caisse); 

       //MainActivity.categories is an array filled with strings 
       spinnerAdapter.setDropDownViewResource (android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner
        spinnerCaisse.setAdapter(spinnerAdapter);

        spinnerCaisse.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long itemID) {

                 String text = spinnerCaisse.getSelectedItem().toString();

                if(text.equals("TOUS"))
                adapter.getFilter().filter("");
                else {
                   adapter.getFilter().filter(text);
                   adapter.notifyDataSetChanged();

                }
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });

    private void setupSearchView()
    {
        searchAssure.setIconifiedByDefault(false);
        searchAssure.setOnQueryTextListener(this);
        searchAssure.setSubmitButtonEnabled(true);
        searchAssure.setQueryHint("Chercher un assuré CNAM");
    }
    @Override
    public boolean onQueryTextChange(String newText)
    {
        if (TextUtils.isEmpty(newText)) {
            lvAssure.clearTextFilter();
            adapter.getFilter().filter("");
        } else {
            lvAssure.setFilterText(newText);
        }
        return true;
    }
    @Override
    public boolean onQueryTextSubmit(String query)
    {
        return false;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...