[英]viewpager inside of framelayout
我的示例由Mainactivity.java(FragmentActivity),稱為Fragment_ViewPager的片段(Fragment),適配器Adapter_ViewPager(FragmentPagerAdapter)和三個片段組成,這三個片段是fragmentienden的常見片段,並具有onCreateView方法。
Mainactivity.java
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager FM = getSupportFragmentManager();
FragmentTransaction FT = FM.beginTransaction();
Fragment_ViewPager f_pager = new Fragment_ViewPager();
FT.add(R.id.fragment_container, f_pager);
FT.commit();
}
}
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout>
Fragment_ViewPager.java
private static final int[] ICONS = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher };
private FragmentPagerAdapter mFragmentPagerAdapter;
private ViewPager mViewPager;
private TabPageIndicator mTabPagerIndicator;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.f_pager, container, false);
mFragmentPagerAdapter = new Adapter_ViewPager(getActivity().getSupportFragmentManager(), ICONS);
mViewPager = (ViewPager)v.findViewById(R.id.view_pager_inicio);
mViewPager.setAdapter(mFragmentPagerAdapter);
mTabPagerIndicator = (TabPageIndicator)v.findViewById(R.id.tab_indicator_inicio);
mTabPagerIndicator.setViewPager(mViewPager);
return v;
}
fragment_viewpager.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/tab_indicator_inicio"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager_inicio"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
</LinearLayout>
Adapter_ViewPager.java
private static int[] ICONS = null;
private Fragment mFragment = null;
public Ad_inicio(FragmentManager fm, int[] icons) {
super(fm);
ICONS = icons;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
mFragment = new Fragmento_uno();
break;
case 1:
mFragment = new Fragmento_dos();
break;
case 2:
mFragment = new Fragmento_tres();
break;
default:
break;
}
return mFragment;
}
@Override
public int getIconResId(int index) {
return ICONS[index];
}
@Override
public int getCount() {
return ICONS.length;
}
Fragment_One.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragmento_One, container, false);
return v;
}
fragment_one.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="uno" />
</LinearLayout>
滑動片段的效果很好,但是問題是當我將設備的方向從縱向更改為水平設備時,滑動不起作用,並且在垂直方向顯示之前僅顯示fragemnto ...我不知道我在做什么,因為viewpager必須在FragmentAcitivity中運行,但是對於本示例,我不得不擴展Fragment以使用dentrod的FrameLayout,看起來像它的getActivity()。 我第二次將他發送給Adpater的GetSupportFragmentManager()無法正常運行。
除默認constructor(FragmentManager)
之外,不要對Adapter_ViewPager
類使用其他構造constructor(FragmentManager)
!
我認為,當您的活動重新開始時,Android會調用默認的構造函數,而ICONS
將為null。
嘗試在此處放置一個斷點,然后看一下旋轉后ICONS
的值是多少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.