Имеет ли ваш класс CountryTable какое-либо взаимодействие с деятельностью / классом пользовательского интерфейса?Даже выбирая новые строки для вашего объекта адаптера?Если да, вы не можете обновить свою деятельность за пределами самой деятельности.
К счастью, вы можете преодолеть это довольно легко, когда вы найдете решение;)
шаг 1:
Определите интерфейс, например CheckCountryCallback
, с помощью одного метода с именем onCheckCountryFinished(String taskResult)
;
Шаг 2: пусть действие, вызывающее вашу асинхронную задачу, реализует этот интерфейс и его метод.
Шаг 3: определитеконструктор для вашей asyncTask с одним параметром типа CheckCountryCallback
Шаг 4: переопределите onPostExecute вашего AT и просто напишите mCaller.onCheckCountryFinished (result).
К сожалению, этого недостаточноМы все еще будем обновлять пользовательский интерфейс из другого потока, но мы приближаемся!
В вашем реализованном onCheckCountryFinished вы должны перенаправить вызов на обработчик, который вы определили в своей деятельности.Отправьте сообщение этому обработчику, и вы можете обновить пользовательский интерфейс (или адаптер или еще что-то) из метода обработчика сообщений обработчика.
Пример обработчика:
private static final int UPDATE = 2;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == UPDATE) {
//do something with m.obj
myAdapter.notifyDataSetChanged();
}
}
};
Пример обратного вызова
public void onCheckCountryFinished(String result){
Message m = Message.obtain();
m.what = UPDATE;
m.obj = result;
handler.sendMessage(m);
}