Ниже приведен рабочий пример того, как можно применить SelectedItem от двух счетчиков, а затем, нажав кнопку «Поиск», отобразить только строки, содержащие оба элемента (если они есть).
Примеры основаны на предоставленном вами сценарии. То есть есть определенный список городов и групп крови, который можно выбрать с помощью счетчиков. Таблица записей включает столбцы для обоих плюс два столбца _id и name . Тестовая база данных содержит 100 случайных имен, городов и групп крови.
Макет activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Blood Bank" />
<Spinner
android:id="@+id/select_bloodgroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Spinner>
<Spinner
android:id="@+id/select_city"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Spinner>
<Button
android:id="@+id/search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Search"/>
<ListView
android:id="@+id/records_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>
DatabaseHelper DBHelper.java
public class DBHelper extends SQLiteOpenHelper {
public static final String DBNAME = "bloodbank";
public static final int DBVERSION = 1;
public static final String TB_RECORDS = "records";
public static final String COl_RECORDS_ID = BaseColumns._ID;
public static final String COL_RECORDS_NAME = "_name";
public static final String COL_RECORDS_BLOODGROUP = "_blood_group";
public static final String COL_RECORDS_CITY = "_city";
SQLiteDatabase mDB;
public DBHelper(Context context) {
super(context,DBNAME, null, DBVERSION);
mDB = this.getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
String crtrecords = "CREATE TABLE IF NOT EXISTS " +
TB_RECORDS + "(" +
COl_RECORDS_ID + " INTEGER PRIMARY KEY," +
COL_RECORDS_NAME + " TEXT," +
COL_RECORDS_CITY + " TEXT, " +
COL_RECORDS_BLOODGROUP + " TEXT" +
")";
db.execSQL(crtrecords);
}
@Override
public void onUpgrade(SQLiteDatabase db, int i, int i1) {
}
public long addRecord(String name, String city, String bloodgroup) {
ContentValues cv = new ContentValues();
cv.put(COL_RECORDS_NAME,name);
cv.put(COL_RECORDS_CITY,city);
cv.put(COL_RECORDS_BLOODGROUP,bloodgroup);
return mDB.insert(TB_RECORDS,null,cv);
}
public Cursor getrecords(String city, String bloodgroup) {
ArrayList<String> baseargs = new ArrayList<>();
String whereclause = null;
if (city != null && city.length() > 0) {
whereclause = COL_RECORDS_CITY + "=?";
baseargs.add(city);
}
if (bloodgroup != null && bloodgroup.length() > 0) {
if (whereclause != null && whereclause.length() > 0) {
whereclause = whereclause + " AND ";
} else whereclause = "";
whereclause = whereclause + COL_RECORDS_BLOODGROUP + "=?";
baseargs.add(bloodgroup);
}
String[] whereargs = null;
if (baseargs.size() > 0) {
whereargs = new String[baseargs.size()];
for (int i =0; i < baseargs.size();i++) {
whereargs[i] = baseargs.get(i);
}
}
return mDB.query(TB_RECORDS,null,whereclause,whereargs,null,null,COL_RECORDS_NAME);
}
}
Активация MainActivity.java : -
public class MainActivity extends AppCompatActivity {
//Specific Blood groups
public static final String[] BLOODGROUPS = new String[]{
"A+","A-","B+","B-","0+","0-","AB+","AB-"
};
//Specific Cities
public static final String[] CITIES = new String[]{
"London","Paris","New York","Montreal","Gurgaon"
};
// Some names for auto generation of test data
static final String[] peoples_names = new String[]{
"Fred","Mary","Bert","Anne","James","Susan","Tom","Theresa",
"Cherles","Corrine","David","Diana","Edward","Esmerelda",
"George","Gorgina","Harrold","Heather"
};
TextView mTitle;
Spinner mBloodGroups, mCities;
Button mSearch;
DBHelper mDBHlpr;
ArrayAdapter<String> mCitiesAdapter, mBloodGroupsAdapater;
ListView mRecordsList;
SimpleCursorAdapter mSCA;
String mCurrentCities = "", mCurrentBloodGroups = "";
Cursor mCsr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = this.findViewById(R.id.title);
mBloodGroups = this.findViewById(R.id.select_bloodgroup);
mCities = this.findViewById(R.id.select_city);
mSearch = this.findViewById(R.id.search);
mRecordsList = this.findViewById(R.id.records_list);
mCurrentCities = "";
mCurrentBloodGroups = "";
// Add some test data
mDBHlpr = new DBHelper(this);
if (DatabaseUtils.queryNumEntries(mDBHlpr.getWritableDatabase(),DBHelper.TB_RECORDS) < 1) {
Random rnd = new Random();
rnd.setSeed(System.currentTimeMillis());
for (int i = 0; i < 100; i++) {
mDBHlpr.addRecord(
peoples_names[rnd.nextInt(peoples_names.length)],
CITIES[rnd.nextInt(CITIES.length)],
BLOODGROUPS[rnd.nextInt(BLOODGROUPS.length)]
);
}
}
//Setup City Spinner
mCitiesAdapter = new ArrayAdapter<>(this,android.R.layout.simple_dropdown_item_1line,CITIES);
mCities.setAdapter(mCitiesAdapter);
//Setup Bloodgroups Spinner
mBloodGroupsAdapater = new ArrayAdapter<>(this,android.R.layout.simple_dropdown_item_1line,BLOODGROUPS);
mBloodGroups.setAdapter(mBloodGroupsAdapater);
// Add Search Buitton Click Listener
mSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCurrentCities = mCities.getSelectedItem().toString();
mCurrentBloodGroups = mBloodGroups.getSelectedItem().toString();
refreshList();
}
});
// Initial List (All)
refreshList();
}
//Setup or refresh the ListView
private void refreshList() {
// Grab the data
mCsr = mDBHlpr.getrecords(mCurrentCities,mCurrentBloodGroups);
// If first time then setup the Cursor Adapter
if (mSCA == null) {
mSCA = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
mCsr,
new String[]{DBHelper.COL_RECORDS_NAME,DBHelper.COL_RECORDS_CITY},
new int[]{android.R.id.text1, android.R.id.text2},
0
);
mRecordsList.setAdapter(mSCA);
}
// If not first time then swap the cursor
else {
mSCA.swapCursor(mCsr);
}
}
}
Результат
Первоначально отображается следующее (поскольку данные генерируются случайным образом, они могут отличаться, хотя в списке будет 100 элементов): -

После выбора города Гургаон: - (заметьте, что результаты могут отличаться из-за случайных данных): -

После выбора группы крови A-: - (опять результаты скорее всего будут отличаться): -

- Обратите внимание, что этот пример работает, предполагается, что вы извлекаете уроки из предоставленного кода и проводите ВАШЕ исследование, если у вас есть последующие вопросы, вы должны задавать их как отдельные и разные вопросы о переполнении стека.