Это приложение должно иметь четыре или более связанных прядильщика, которые должны перезаряжаться, когда изменяется их выбор родительского "счетчика", в качестве примера с двумя прядильщиками: домами и комнатами - если вы выберете дом, заклинатель комнаты должен перезарядиться с база данных sqlite.
Я пробовал два подхода: класс MySpinner, который принимает "дочерний" Spinner в своем конструкторе и сообщает ребенку обновить себя, когда OnSelectedItem запущен, например
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (MySpinner.this.mChild.equals(null) == false) {
MySpinner.this.mChild.updateData((int)id);
}
}
дочерняя updateDatap >
public void updateData (int parentValue) {
new backgroundTask().execute("create");
}
какие фоновые задачи являются AsyncTask для запроса базы данных sqlite:
@Override
protected Void doInBackground(String... params) {
Db = new MyDatabase(mContext);
Db.open();
if(params[0] == "create") {
if (mTable.equals("T_room")){
mCursor = mDb.getRooms(mParentValue);
}
}
return null;
}
Мой второй подход заключался в создании всех моих прядильщиков непосредственно в файле activity.java. Этот второй подход предусматривает, что я реализую одну AsyncTask для всех 4 или более прядильщиков и выбираю, что нужно запрашивать из db, исходя из того, кто вызывает с каким значением.
Первый подход падает на единственную "реальную" строку кода в асинтете, второй подход заставляет меня сходить с ума от автозапускающих прядильщиков и беспорядка ifs в асинтете.
Я не кодер каким-либо образом, и задаюсь вопросом, может ли кто-нибудь, хорошо разбирающийся в ориентированном кодировании object-, просветить меня относительно того, что будет хорошим кодовым поведением для решения моей конкретной проблемы (несколько прядильщиков, которые обновляют друг друга при выборе.)
Это интересно, в данный момент я делаю что-то подобное. Просто сохраните ссылку на адаптер, а внутри onItemSelected
получите доступ к объекту с помощью adapter.getItem(pos)
. Затем вы можете использовать этот объект для обновления второго адаптера-счетчика. Просто позаботьтесь о потоке пользовательского интерфейса. Я хотел бы сделать это более чистым способом, но я не знаю, как это сделать.