Viewpageindicator inside fragment

来源:互联网 发布:localstorage用法 php 编辑:程序博客网 时间:2024/04/29 10:21


1
down votefavorite
1

With a SherlockActionBar i've created a nice interface. In landscape mode you see both listfragment and "detailsfragment".

Now I would like to a add a viewpageindicator (https://github.com/JakeWharton/Android-ViewPagerIndicator) inside the detailsframe, so i would look like this:

--------------------------||_1___|TAB1 | TAB2 | ETC  ||_2___|-------------------||_3___|Example: content   ||_4___| TAB1 of listitem 1| |_5___|___________________|

I hope this is clear. So basicly I would a FragmentManager/TabPageIndicator inside a fragment.

I this possible? I can't figure it out.. :(

Thank you!

2 Answers

activeoldestvotes
up vote4down voteaccepted

You should not put a Fragment inside a Fragment. You can however put a ViewPager inside a fragment and get the result you're looking for.

I was facing the same issue a while ago for one of my apps (only I wanted the ViewPager to contain some ListViews). This was the end result (see the lines; red contains Fragment, blueViewPagerIndicator, green ViewPager):

Example ViewPager inside a Fragment

I accomplished this with the following steps. Fist, for the detail-fragment, I created the following XML file:

<?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/viewpagerIndicator"        android:layout_height="wrap_content"        android:layout_width="match_parent" />    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1" /></LinearLayout>

Then, I set up a custom PagerAdapter to populate the ViewPager and the TabPageIndicator:

public class MainPagerAdapter extends PagerAdapter implements TitleProvider {    // constructor    ...            @Override    public void destroyItem(ViewGroup container, int position, Object object) {        // remove the object (we don't want to keep it in memory as it will get recreated and cached when needed)        ViewPager viewPager = (ViewPager) container;        View view = (View) object;        viewPager.removeView(view);    }    @Override    public Object instantiateItem(View pager, final int position) {        // inflate your 'content'-views here (in my case I added a listview here)        // similar to a listadapter's `getView()`-method        View wrapper = ... // inflate your layout        ... // fill your data to the appropriate views        ((ViewPager) pager).addView(wrapper);    }    public String getTitle(int position) {        ... // return the title of the tab    }}

Next, in my fragment, I set the following:

public class MainFragment extends Fragment {    private MainPagerAdapter pagerAdapter;    private TabPageIndicator mIndicator;    private ViewPager viewPager;    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        View detailsFrame = context.findViewById(R.id.details_fragment);        // setup your adapter: pass data, etc.        this.pagerAdapter = new MainPagerAdapter(...);        this.viewPager = (ViewPager) context.findViewById(R.id.viewpager);        viewPager.setAdapter(pagerAdapter);        this.mIndicator = (TabPageIndicator) context.findViewById(R.id.viewpagerIndicator);        this.mIndicator.setViewPager(viewPager);    }}

0
down vote

You can't nest fragments inside fragments. It will be displayed fine, but it will crash when you will want to replace some of them using transactions.

Have a look a these:

  • Problem putting a fragment into another fragment
  • Android: Can you nest Fragments?
本文来自:
http://stackoverflow.com/questions/9699881/viewpageindicator-inside-fragment


原创粉丝点击