В настоящее время я работаю над приложением, которое, как мы надеемся, будет действовать как игрок «eBook». Прочитав ряд уроков, связанных с фрагментами, я решил использовать подход «Фрагмент/просмотрщик».Многослойные фрагменты в viewpager
Перейдя немного подробнее, я решил следовать великолепному руководству по вложенным фрагментам Линден Дарлингттпс: //plus.google.com/100467024733771542884/posts/24HcFW5hEiV.
Я создал фрагмент «webview» для каждой отдельной страницы книги с ее собственным расположением. Поэтому, если моя книга состоит из 6 страниц, тогда у меня будет BookPage1Fragment, BookPage2Fragment, BookPage3Fragment, BookPage4Fragment, BookPage5Fragment, BookPage6Fragment и т. Д. Мне удалось заставить это работать в viewpager, так что все прокручивание фрагментов и т. Д. Отлично работает. Проблема в том, что на экране отображается только один фрагмент. Я хотел бы иметь два фрагмента (многоуровневая), когда при запуске приложения на больших устройствах и ландшафтном ориентировании и на одной панели (по одному фрагменту за раз) при работе на небольших устройствах или в портретном режиме. Я хочу отобразить макет с двумя панелями с одним фрагментом слева и одним фрагментом righT.
См ниже код:
public class ParentFragment extends Fragment {
public static final String TAG = ParentFragment.class.getSimpleName();
public static ParentFragment newInstance() {
return new ParentFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_parent, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
}
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 6;
}
/*
@Override
public Fragment getItem(int position) {
Bundle args = new Bundle();
args.putInt(TextViewFragment.POSITION_KEY, position);
return TextViewFragment.newInstance(args);
}
*/
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new BookPage1Fragment();
case 1:
return new BookPage2Fragment();
case 2:
return new BookPage3Fragment();
case 3:
return new BookPage4Fragment();
case 4:
return new BookPage5Fragment();
case 5:
return new BookPage6Fragment();
default:
return getItem(0);
}
}
@Override
public CharSequence getPageTitle(int position) {
return "Fragment # " + position;
}
}
}
В основном два фрагмента, появляющиеся на ландшафтном режиме и один фрагмент появляется в тот момент, когда в портретном режиме, так же, как пример описывает на developer.blogspot http://android-developers.blogspot.in/2011/02/android-30-fragments-api.html, но встроенный в ViewPager ,
Вот мой main.layout.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout> xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
Вот что мой WebView фрагмент
public class WebViewFragment extends Fragment {
@SuppressLint("SetJavaScriptEnabled")
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mainView = (View) inflater.inflate(R.layout.fragment_web, container, false);
WebView myWebView = (WebView) mainView.findViewById(R.id.webview);
myWebView.loadUrl("file:///android_asset/Ebook-001.html");
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.getSettings().setBuiltInZoomControls(true);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setSupportZoom(true);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.getSettings().setUseWideViewPort(true);
myWebView.getSettings().setLoadWithOverviewMode(true);
return mainView;
}
}
вот мой фрагмент WebView расположение:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Итак, в заключение я хотел бы:
1: Дисплей два фрагмента в viewpager в ландшафтном режиме и один в портретном режиме.
2: Использование одного вида деятельности, независимо от размера устройства, и решить, во время выполнения, следует ли комбинировать фрагменты в макете (чтобы создать множественную панель дизайна) или фрагменты подкачки (чтобы создать конструкцию с одной панели)
Надеюсь, что все это имеет смысл! Заранее благодарю за любые предложения ...