Android ViewPager и дизайн фрагментов - PullRequest
0 голосов
/ 14 октября 2011

У меня есть ViewPager с 3 фрагментами. Все отлично работает с двумя из них. Проблема с третьим пейджером. Это TabHost, в котором есть один фрагмент в каждой вкладке. Но я читал, что невозможно поместить Tabhost во фрагмент. Вложенные фрагменты запрещены.

Кто-нибудь знает, что я могу сделать для решения моей проблемы? Есть альтернативы?

Ответы [ 2 ]

0 голосов
/ 26 марта 2012

Это то, что я сделал для решения своей проблемы.

Я сделал один "пользовательский" Tabhost ". Я говорю" пользовательский ", потому что это не Tabhost, кажется, только.один из моих фрагментов внутри ViewPager, у меня есть 4 изображения поверх фрагмента, а остальная часть фрагмента - один FrameLayout. Каждый раз, когда я касаюсь изображений, я заменяю фрагмент, который находится в кадре для соответствующего фрагмента.

Я добавляю некоторый код:

<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>

В 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);
}

И, наконец, в 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;
}

}

Я надеюсь, что объяснил себя хорошо. Если кому-то нужна дополнительная информация, просто скажите мне.

0 голосов
/ 26 марта 2012

Вы можете ссылаться на код, как указано в этой задаче, он будет работать в соответствии с вашим дизайном. Пожалуйста, см.

...