Inner Viewpage Fragment

With SherlockActionBar, I created a nice interface. In landscape mode, you see both listfragment and "detailfragment".

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

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

Hope this is clear. So basically I would use the FragmentManager / TabPageIndicator inside the fragment.

Am I possible? I can not figure it out. :(

Thanks!

+5
source share
2 answers

Do not put a Fragment inside a Fragment . However, you can place the ViewPager inside the fragment and get the result you are looking for.

I ran into the same problem a while ago for one of my applications (only I wanted the ViewPager contain some ListView s). This was the final result (see Rows:. Red contains Fragment , blue ViewPagerIndicator , 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 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 `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 snippet, I installed 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); } } 
+6
source

You cannot insert fragments inside fragments. It will display in order, but it will work when you want to replace some of them using transactions.

See a:

0
source

Source: https://habr.com/ru/post/910896/


All Articles