2012-03-14 24 views
5

Với SherlockActionBar tôi đã tạo một giao diện đẹp. Trong chế độ ngang, bạn sẽ thấy cả hai liệt kê và "chi tiết".Viewpageindicator bên trong đoạn

Bây giờ tôi muốn một thêm một viewpageindicator (https://github.com/JakeWharton/Android-ViewPagerIndicator) bên trong detailsframe, vì vậy tôi sẽ trông như thế này:

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

Tôi hy vọng điều này là rõ ràng. Vì vậy, cơ bản tôi sẽ một FragmentManager/TabPageIndicator bên trong một mảnh.

Tôi có thể làm điều này? Tôi không thể hình dung nó ra .. :(

Cảm ơn bạn!

+0

Vì vậy, bạn có một ListViewFragment ở bên trái? Sau đó, mỗi mục ListView sẽ tải một phân đoạn RHS khác nhau có chứa: TabPageIndicator và ViewPager? –

Trả lời

6

Bạn không được đặt Fragment bên trong một Fragment. Tuy nhiên, bạn có thể đặt ViewPager bên trong một đoạn và nhận kết quả mà bạn đang tìm kiếm.

Tôi đã gặp phải vấn đề tương tự cách đây một lúc đối với một trong các ứng dụng của tôi (chỉ tôi muốn ViewPager để chứa một số ListView giây). Đây là kết quả cuối cùng (xem các dòng; đỏ chứa Fragment, xanh ViewPagerIndicator, xanh lá cây ViewPager):

Example ViewPager inside a Fragment

tôi thực hiện điều này với các bước sau. Fist, cho các chi tiết-mảnh, tôi tạo ra các tập tin XML sau:

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

Sau đó, tôi thiết lập một PagerAdapter tùy chỉnh để cư ViewPager và 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 
    } 
} 

Tiếp theo, trong mảnh của tôi , Tôi đặt như sau:

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); 
    } 
} 
+1

Câu trả lời tuyệt vời! –

+0

Xin chào vui lòng cung cấp mã đầy đủ .. tôi không thể hiểu tại một số điểm cảm ơn trước – VENKI

+0

@Reinier, Xem này là gì DetailsFrame = context.findViewById (R.id.details_fragment); nó đại diện cho cái gì? Trong đó bố trí là i.d đặt? –

Các vấn đề liên quan