В моем проекте я создал объектный класс с именем 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;
}
}