ViewPagerを含むフラグメントのリストビューは、戻ったときに空です。このViewPagerは、ナビゲーション・ドロワー・レイアウトを使用しているため、フラグメント内にあります。私は今、より詳細にそれを説明してみましょう:LoaderCallbacksを実装するフラグメントビューリストのListView
私はナビゲーションドロワーのレイアウトを使用して、結果的に、フラグメントを使用しています。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
/* More code */
ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.main_view_pager);
viewPager.setAdapter(new SimpleFragmentPagerAdapter(getActivity(), getActivity().getSupportFragmentManager()));
/* Code for Tablayout */
return rootView;
}
:
@Override
protected void onCreate(Bundle savedInstanceState) {
/* More code */
currentFragment = new MainFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.layout_for_fragments, currentFragment).commit();
}
MainFragmentクラスはonCreateViewのコードのこれらの行()で初期化さViewPagerが含ま:メインアクティビティでのonCreateで、Iは、これらのコード行と現行断片を設定します SimpleFragmentPagerAdapterクラスの断片の
一つはLoaderManager.LoaderCallbacks最初の実行で
public class ExpensesFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
private ExpenseCursorAdapter mExpenseCursorAdapter;
private static final int EXPENSE_LOADER = 1;
public ExpensesFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_expenses, container, false);
ListView expensesListView = (ListView) rootView.findViewById(R.id.expenses_list_view);
mExpenseCursorAdapter = new ExpenseCursorAdapter(getContext(), null);
expensesListView.setAdapter(mExpenseCursorAdapter);
getLoaderManager().initLoader(EXPENSE_LOADER, null, this);
return rootView;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(/* arguments */);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
mExpenseCursorAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
mExpenseCursorAdapter.swapCursor(null);
}
}
を実装し、この一つであり、すべてが正常に動作します。私はこの方法を実装していナビゲーションドロワーメニュー、をクリックしてください場合は、ListViewコントロールが空になった:私は、デバイスを回転させたときに
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_main) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().remove(currentFragment).commit();
currentFragment = new MainFragment();
fragmentManager.beginTransaction().replace(R.id.layout_for_fragments, currentFragment).commit();
} else if (id == R.id.nav_blank) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().remove(currentFragment).commit();
currentFragment = new BlankFragment();
fragmentManager.beginTransaction().replace(R.id.layout_for_fragments, currentFragment).commit();
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
問題も存在します。しかし、違いがあります。 Navigation Drawerメニューを使用すると、LoaderManager.LoaderCallbacksのメソッドは呼び出されませんが、デバイスを回転するとonLoadFinishedが呼び出されます。
とにかく、問題は解決しません。任意のideiasどのようにそれを解決するには?
ありがとうございます。