Как реализовать два фрагмента в одном представлении?

У меня есть приложение, которое имеет 3 фрагмента. И это прекрасно работает viewpager.

Но мне нужно реализовать аналогичный вид, как в магазине Android Play. Изначально у них есть вкладка «Избранное». Когда вы проводите пальцем влево, мы видим вкладку «Категории».

Но половина экрана по-прежнему заполнена содержимым вкладки «Избранное». Как я могу реализовать это представление? Есть идеи?


person intrepidkarthi    schedule 13.09.2012    source источник
comment
Будет здорово, если кто-нибудь может дать ссылку, где я могу посмотреть   -  person intrepidkarthi    schedule 13.09.2012
comment
Я просмотрел эту ссылку. Но в этом они используют только один макет.   -  person intrepidkarthi    schedule 14.09.2012


Ответы (3)


Вот реальный ответ. Публикация спустя долгое время.

Добавьте этот метод в свой адаптер:

@Override
public float getPageWidth(int position) {
if (position == 0) {
    return(0.5f);
} else {
    return (1.0f);       
}
}
person intrepidkarthi    schedule 25.01.2013

Ознакомьтесь с ViewPagerIndicator.

Если вы хотите как это выглядит.

Вам нужен раздел Заголовки.

person Benito Bertoli    schedule 13.09.2012
comment
Я уже рассмотрел это. Но это не то, что я ищу на самом деле. - person intrepidkarthi; 13.09.2012
comment
Какой функции вам точно не хватает? Плитка разрезается пополам? Потому что это единственная разница, которую я замечаю. - person Benito Bertoli; 13.09.2012
comment
да. Это единственная функция, которая мне нужна. - person intrepidkarthi; 13.09.2012

Чтобы отобразить два фрагмента в одном представлении, вы можете добавить макет, ширина и высота которого будут обертывать содержимое в макете одного фрагмента, а затем в вашем onCreateView добавить другой фрагмент с помощью диспетчера фрагментов. Код будет таким --

<?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"
    android:orientation="vertical" >
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="horizontal"
        >
        <LinearLayout 
             android:id="@+id/ll1"
             android:layout_width="wrap_content"
             android:layout_height="fill_parent"
             android:orientation="vertical"
             >

        </LinearLayout>
        <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button 
    android:id="@+id/tb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="test"/>


</LinearLayout>

And onCreate Will be Like --

View view ;

boolean isVisible = false;

FragmentManager fm;
FragmentTransaction ft;
Fragment menuFragment;
LinearLayout llList;

@Override
public View onCreateView(LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {

    view = inflater.inflate(R.layout.main, container, false);
    llList = (LinearLayout) view.findViewById(R.id.ll1);
    menuFragment = new frg1();
    fm = getFragmentManager();


    Button tb = (Button) view.findViewById(R.id.tb);
    tb.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            if(!isVisible) {

                isVisible = true;
                showList();
            }
            else {

                isVisible = false;
                hideList();
            }

        }
    });

    return view;
}


private void changeDisplay() {

    Display display = getActivity().getWindowManager().getDefaultDisplay();
    int width = (int) (display.getWidth() * 0.8 );
    int height = (int) (display.getHeight() * 0.8);

    if(isVisible) 
    {
        llList.setLayoutParams(new LinearLayout.LayoutParams(width, LayoutParams.FILL_PARENT));
        //lllList.setLayoutParams(new LinearLayout.LayoutParams(p))
    }
    else {
        llList.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
        //llList.scrollTo(0, 0);
    }
}

private void showList() {

    changeDisplay();

    ft = fm.beginTransaction();
    ft.add(R.id.ll1, menuFragment);
    ft.commit();
}

private void hideList() {

    changeDisplay();

    ft = fm.beginTransaction();
    ft.remove(menuFragment);
    ft.commit();
}
person Chinmoy Debnath    schedule 13.09.2012
comment
Спасибо дружище. Я постараюсь и дам вам знать. - person intrepidkarthi; 13.09.2012