Я искал this answer и, похоже, имел дело только с одним текстовым просмотром.Обновление TextView для разных фрагментов из AsyncTask
В принципе, у меня есть приложение для Android с n
фрагментами, каждый из которых имеет текстовое представление, которое заполняется из удаленного вызова в базу данных. Каждый раз, когда фрагмент выбран, этот удаленный вызов срабатывает, и текстовое изображение должно быть повторно заселено.
В настоящее время я использую центральный AsyncTask для выполнения этого, однако я начинаю задаваться вопросом, правильно ли это делается (некоторые текстовые просмотры слишком долго обновляются для небольших объемов данных, t получить обновление вообще и т. д.).
Вот код моего RetrieveData
класс. По сути, он определяет, какой текст должен быть обновлен, а затем заполняет это текстовое представление.
public class RetrieveData extends AsyncTask<String, String, String[]> {
private int txtViewID = -1;
private Activity mainActivity;
public RetrieveData(Activity a) { mainActivity = a; }
protected String[] doInBackground(String... urls) {
String[] data;
// call web script to return JSON data
...
// figure out which fragment called which script
if (urls[0] == "get_A.php") {
data = parseJSONdata(); // parse out the JSON
txtViewID = R.id.txtViewA; // find INT-based ID
} else if (urls[0] == "get_B.php") {
data = parseOtherJSONdata(); // different type of call
txtViewID = R.id.txtViewB;
} else ... {
...
}
} catch (Exception e) {
System.out.println("Error: " + e.toString());
}
return data;
}
@Override
protected void onPostExecute(String[] op) {
if (txtViewID != -1) { // call was made
TextView tv = (TextView)mainActivity.findViewById(txtViewID);
tv.setText(op[0]);
}
и вот как я называю это из фрагмента:
public class MainFragment extends Fragment {
Activity mainActivity;
public MainFragment(Activity a) { mainActivity = a; }
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.main_tab,container,false);
new RetrieveData(mainActivity).execute("get_A.php","1");
return v;
}
}
мне, его очень запутано и, вероятно, противоречит моей новизну в Android, поэтому любые предложения по улучшению сердечно оценили.
Я думаю, что основные моменты для (1), (2) и (3)/(3) все связанный с тем фактом, что я чувствовал, что мне нужно передать эту ссылку на «Активность» там. Я могу решить эту проблему. Таким образом, с внутренним обратным вызовом, я не буду следовать. Является ли callback реализацией полной AsyncTask или просто обновлением текста? – espais
Я добавлю краткий пример ответа, чтобы помочь уточнить. –
Это выглядит очень полезно ... Я попробую ... спасибо! – espais