Родственные прядильщики - PullRequest
1 голос
/ 27 мая 2011

В этом приложении должно быть четыре или более связанных счетчика, которые должны перезагружаться при изменении выбора их «родительского счетчика» - например, с двумя счетчиками: домами и комнатами - если вы выбираете дом, счетчик комнат должен перезагрузиться изsqlite database.

Я испробовал два подхода: класс 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);              
        }
    }

updateData ребенка -

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;
}

Мой второй подход заключается в создании всех моих счетчиков непосредственно в упражнении.Java-файл.Этот второй подход позволяет мне реализовать один AsyncTask для всех 4 или более счетчиков и выбирать, что запрашивать из БД, основываясь на том, кто с каким значением вызывает.

Первый подход дает сбой только в «реальной» строке кода.в асинхронной задаче второй подход сводит меня с ума из-за автонастройки счетчиков и беспорядка ifs в асинхронной задаче.

Я ни в коем случае не кодер, и мне интересно, может ли кто-то хорошо разбираться в объектно-ориентированном кодированиипросветите меня относительно того, что было бы хорошим поведением кодирования для решения моей конкретной проблемы (несколько блесен, которые обновляют друг друга при выборе.)

1 Ответ

0 голосов
/ 29 июня 2011

Это интересно, в данный момент я делаю нечто подобное. Просто сохраните ссылку на адаптер, и внутри onItemSelected получите доступ к объекту с помощью adapter.getItem(pos). Затем вы можете использовать этот объект для обновления второго адаптера счетчика. Просто позаботьтесь о потоке пользовательского интерфейса. Я хотел бы сделать это более чистым способом, но я не знаю, как это сделать.

...