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
):
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);
}
}
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? –