2013-04-18 4 views
4

В настоящее время я работаю над приложением, которое, как мы надеемся, будет действовать как игрок «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: Использование одного вида деятельности, независимо от размера устройства, и решить, во время выполнения, следует ли комбинировать фрагменты в макете (чтобы создать множественную панель дизайна) или фрагменты подкачки (чтобы создать конструкцию с одной панели)

Надеюсь, что все это имеет смысл! Заранее благодарю за любые предложения ...

ответ

1

Вам необходимо создать файл макета для ландшафтного режима. Вам нужно создать файл в папке res с именем макета. В этой папке создайте макет с тем же именем который помещается в файл макета. Андроид автоматически получает доступ к нему, когда экран переключается в альбомный режим.