[英]Android ViewPager and fragments design
I have a ViewPager
with 3 fragments into it. 我有一个ViewPager
其中有3个片段。 Everything works fine with two of them. 两个都可以正常工作。 The problem is with the third pager This one is a TabHost
, in which there is one fragment in each tab. 问题出在第三个寻呼机上。这是一个TabHost
,其中每个选项卡中都有一个片段。 But I've read that it's is not possible to put a Tabhost
inside a Fragment. 但是我已经读过,不可能将Tabhost
放在Fragment中。 Nested fragments are forbidden. 禁止嵌套片段。
Anyone has any idea of what can I do for resolving my problem? 任何人都知道我该如何解决我的问题? Any alternatives? 有其他选择吗?
This is what i've done for resolving my problem. 这就是我为解决问题所做的工作。
I've done one "custom" Tabhost". I say "custom" because it is not a Tabhost, it seems to only. In one of my fragements inside the ViewPager, i've 4 images on top of the fragment. And the rest of the fragment is one FrameLayout. Each time i touch on the images, i replace the fragment which is in the frame for the respective fragemnt. 我做了一个“自定义” Tabhost。我说“自定义”是因为它不是一个Tabhost,在ViewPager中的一个片段中,我在片段顶部有4张图像。片段的其余部分是一个FrameLayout,每次我触摸图像时,我都会替换相应的fragemnt框架中的片段。
I add some code: 我添加一些代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableRow >
<LinearLayout android:id="@+id/button1"
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="button1Click"
>
<ImageView android:id="@+id/iv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic1"/>
<TextView android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text1"/>
</LinearLayout>
<LinearLayout android:id="@+id/button2"
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="button2Click"
>
<ImageView android:id="@+id/iv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic2"/>
<TextView android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text2"/>
</LinearLayout>
<LinearLayout android:id="@+id/button3"
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="button3Click"
>
<ImageView android:id="@+id/iv3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic3"/>
<TextView android:id="@+id/tv3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text3"/>
</LinearLayout>
<LinearLayout android:id="@+id/button4"
android:orientation="vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="button4Click"
>
<ImageView android:id="@+id/iv4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/ic4"/>
<TextView android:id="@+id/tv4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/text4"/>
</LinearLayout>
</TableRow>
</TableLayout>
</LinearLayout>
<FrameLayout android:id="@+id/layout_actual"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
In the FragmentActivity: 在FragmentActivity中:
public void boton1Click(View v){
mFragmentInViewPager.changeFragment(BUTTON1);
}
public void boton2Click(View v){
mFragmentInViewPager.changeFragment(BUTTON2);
}
public void boton3Click(View v){
mFragmentInViewPager.changeFragment(BUTTON3);
}
public void boton4Click(View v){
mFragmentInViewPager.changeFragment(BUTTON4);
}
And finally in the FragmentInViewPager (the one which contains the other 4 fragments) 最后是FragmentInViewPager(一个包含其他4个片段的片段)
public void changeFragment(int fragmentId)
{
if(mCurrentFragmentId != fragmentId) {
switch(fragmentId) {
case BUTTON1:
mFTransaction = mFManager.beginTransaction();
mFTransaction.replace(R.id.layout_actual, mFragment1);
mFTransaction.commit();
mIv1.setImageResource(R.drawable.ic1_sel);
mIv2.setImageResource(R.drawable.ic2);
mIv3.setImageResource(R.drawable.ic3);
mIv4.setImageResource(R.drawable.ic4);
break;
case BUTTON2:
mFTransaction = mFManager.beginTransaction();
mFTransaction.replace(R.id.layout_actual, mFragment2);
mFTransaction.commit();
mIv1.setImageResource(R.drawable.ic1);
mIv2.setImageResource(R.drawable.ic2_sel);
mIv3.setImageResource(R.drawable.ic3);
mIv4.setImageResource(R.drawable.ic4);
break;
case BUTTON3:
mFTransaction = mFManager.beginTransaction();
mFTransaction.replace(R.id.layout_actual, mFragment3);
mFTransaction.commit();
mIv1.setImageResource(R.drawable.ic1);
mIv2.setImageResource(R.drawable.ic2);
mIv3.setImageResource(R.drawable.ic3_sel);
mIv4.setImageResource(R.drawable.ic4);
break;
case BUTTON4:
mFTransaction = mFManager.beginTransaction();
mFTransaction.replace(R.id.layout_actual, mFragment4);
mFTransaction.commit();
mIv1.setImageResource(R.drawable.ic1);
mIv2.setImageResource(R.drawable.ic2);
mIv3.setImageResource(R.drawable.ic3);
mIv4.setImageResource(R.drawable.ic4_sel);
break;
}
mCurrentFragmentId = fragmentId;
}
}
I hope of have explained myself well. 我希望自己能很好地解释自己。 If anyone needs more info, just tell me. 如果有人需要更多信息,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.