简体   繁体   English

Android ViewPager和片段设计

[英]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? 有其他选择吗?

You can refer the code as mentioned in this problem it will work as per your design. 您可以参考此问题中提到的代码,它将按您的设计工作。 Plese see 请看

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM