У меня есть 1 активность и 2 фрагмента. Оба фрагмента используют пользовательский Asynctaskloader для получения некоторых данных от веб-сервиса, и, поскольку я использую загрузчик, он должен держать данные в разных действиях и повторных вариантах фрагментов. Оба фрагмента переопределяют метод OnActivity -Create, и вызовы GetLoaderManager (). Initulloger (0, null, это), который либо создает новый или повторный использование существующего загрузчика. У меня есть кнопка, которая заменяет фрагмент № 1 на фрагмент № 2 на щелчке, а фрагмент № 1 выдвигается на фрагмент. Когда пользователь попадает в обратную клавишу, он переключается на фрагмент № 1. < /P>
OnActivityCreated снова вызывается на фрагменте № 1, а затем, очевидно, снова вызывает iniloader (). На этот раз данные уже существуют в загрузке, и я ожидаю, что они снова будут автоматически вызвать метод loadercallbacks.onloadfinefine, потому что он уже имел доступные данные, как описано здесь. Если погрузчик еще не существует, он создается и (если в настоящее время начинается активность/фрагмент) запускает погрузчик. В противном случае последний созданный загрузчик повторно используется. , если в точке вызова, абонент находится в своем запущенном состоянии, и запрашиваемый погрузчик уже существует и сгенерировал свои данные, затем обратный вызов на загрузке (Loader, D) будет называться немедленно (внутри этой функции), поэтому вы должны быть подготовлены к этому. Доставьте. Получил Back Key < /li>
Пользователь теперь снова смотрит на Fragment1, но нет данных. (Это означает, что мне нужно снова получить его от веб -сервиса - и я хотел бы избежать этого, если это возможно) < /li>
< /ul>
Вот моя деятельность: < /p>
public class FragmentTestsActivity extends Activity implements OnClickListener {
private Button btn1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
Fragment newFragment = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, newFragment).commit();
}
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.btn1) {
showNewFragment();
}
}
public void showNewFragment() {
// Instantiate a new fragment.
Fragment2 newFragment = new Fragment2();
// Add the fragment to the activity, pushing this transaction
// on to the back stack.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragmentContainer, newFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
< /code>
Мой фрагмент #1: < /p>
public class Fragment1 extends Fragment implements LoaderCallbacks {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LoaderManager.enableDebugLogging(true);
getLoaderManager().initLoader(0, null, this);
}
private static class TestLoader extends AsyncTaskLoader {
String result;
public TestLoader(Context context) {
super(context);
}
@Override
public String loadInBackground() {
// Some long-running call to a webservice - replaced with a simple string to test with
return "FirstTimeData";
}
@Override
public void deliverResult(String data) {
result = data;
if (isStarted()) {
super.deliverResult(data);
}
}
@Override
protected void onStartLoading() {
if (result != null) {
deliverResult(result);
}
if (takeContentChanged() || result == null) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
return new TestLoader(getActivity());
}
@Override
public void onLoadFinished(Loader loader, String result) {
Log.d("Fragment1", "onLoadFinished: " + result);
}
@Override
public void onLoaderReset(Loader loader) {
// TODO Auto-generated method stub
}
}
< /code>
Кто -нибудь знает решение для этого или то, что я делаю здесь не так? Любая помощь высоко ценится.
Подробнее здесь: https://stackoverflow.com/questions/706 ... d-contains
Loadercallbacks.onloadfinired не вызывается, когда погрузчик ограничивается и содержит данные ⇐ Android
Форум для тех, кто программирует под Android
1749660197
Anonymous
У меня есть 1 активность и 2 фрагмента. Оба фрагмента используют пользовательский Asynctaskloader для получения некоторых данных от веб-сервиса, и, поскольку я использую загрузчик, он должен держать данные в разных действиях и повторных вариантах фрагментов. Оба фрагмента переопределяют метод OnActivity -Create, и вызовы GetLoaderManager (). Initulloger (0, null, это), который либо создает новый или повторный использование существующего загрузчика. У меня есть кнопка, которая заменяет фрагмент № 1 на фрагмент № 2 на щелчке, а фрагмент № 1 выдвигается на фрагмент. Когда пользователь попадает в обратную клавишу, он переключается на фрагмент № 1. < /P>
OnActivityCreated снова вызывается на фрагменте № 1, а затем, очевидно, снова вызывает iniloader (). На этот раз данные уже существуют в загрузке, и я ожидаю, что они снова будут автоматически вызвать метод loadercallbacks.onloadfinefine, потому что он уже имел доступные данные, как описано здесь. Если погрузчик еще не существует, он создается и (если в настоящее время начинается активность/фрагмент) запускает погрузчик. В противном случае последний созданный загрузчик повторно используется. , если в точке вызова, абонент находится в своем запущенном состоянии, и запрашиваемый погрузчик уже существует и сгенерировал свои данные, затем обратный вызов на загрузке (Loader, D) будет называться немедленно (внутри этой функции), поэтому вы должны быть подготовлены к этому. Доставьте. Получил Back Key < /li>
Пользователь теперь снова смотрит на Fragment1, но нет данных. (Это означает, что мне нужно снова получить его от веб -сервиса - и я хотел бы избежать этого, если это возможно) < /li>
< /ul>
Вот моя деятельность: < /p>
public class FragmentTestsActivity extends Activity implements OnClickListener {
private Button btn1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button) findViewById(R.id.btn1);
btn1.setOnClickListener(this);
Fragment newFragment = new Fragment1();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.fragmentContainer, newFragment).commit();
}
@Override
public void onClick(View view) {
int id = view.getId();
if (id == R.id.btn1) {
showNewFragment();
}
}
public void showNewFragment() {
// Instantiate a new fragment.
Fragment2 newFragment = new Fragment2();
// Add the fragment to the activity, pushing this transaction
// on to the back stack.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragmentContainer, newFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
< /code>
Мой фрагмент #1: < /p>
public class Fragment1 extends Fragment implements LoaderCallbacks {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment1, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LoaderManager.enableDebugLogging(true);
getLoaderManager().initLoader(0, null, this);
}
private static class TestLoader extends AsyncTaskLoader {
String result;
public TestLoader(Context context) {
super(context);
}
@Override
public String loadInBackground() {
// Some long-running call to a webservice - replaced with a simple string to test with
return "FirstTimeData";
}
@Override
public void deliverResult(String data) {
result = data;
if (isStarted()) {
super.deliverResult(data);
}
}
@Override
protected void onStartLoading() {
if (result != null) {
deliverResult(result);
}
if (takeContentChanged() || result == null) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
return new TestLoader(getActivity());
}
@Override
public void onLoadFinished(Loader loader, String result) {
Log.d("Fragment1", "onLoadFinished: " + result);
}
@Override
public void onLoaderReset(Loader loader) {
// TODO Auto-generated method stub
}
}
< /code>
Кто -нибудь знает решение для этого или то, что я делаю здесь не так? Любая помощь высоко ценится.
Подробнее здесь: [url]https://stackoverflow.com/questions/7066240/loadercallbacks-onloadfinished-is-not-called-when-loader-is-resused-and-contains[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия