У меня есть 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 не вызывается, когда погрузчик ограничивается и содержит данные ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение