MainFragment包含一个加载多个IndexFragment实例的mViewPager。但是,viewpager没有显示片段,虽然使用调试器,整个代码执行成功没有问题
这是我的代码
MainFragment
//MainFragment.java
public class MainFragment extends Fragment {
private SlidingTabLayout mSlidingTabLayout;
private ViewPager mViewPager;
private List<SamplePagerItem> mTabs = new ArrayList<SamplePagerItem>();
private int tabSepColor;
private int tabSelColor;
private String[] mResources;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tabSepColor = getResources().getColor(R.color.tab_separator);
tabSelColor = getResources().getColor(R.color.tab_selector);
mResources = getResources().getStringArray(R.array.sources);
for (String resource : mResources) {
mTabs.add(new SamplePagerItem(
resource, // Title
tabSelColor, // Indicator color
tabSepColor // Divider color
));
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
mViewPager.setAdapter(new SamplePagerAdapter(getChildFragmentManager()));
mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
mSlidingTabLayout.setViewPager(mViewPager);
mSlidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return mTabs.get(position).getIndicatorColor();
}
@Override
public int getDividerColor(int position) {
return mTabs.get(position).getDividerColor();
}
});
}
static class SamplePagerItem {
private final CharSequence mTitle;
private final int mIndicatorColor;
private final int mDividerColor;
SamplePagerItem(CharSequence title, int indicatorColor, int dividerColor) {
mTitle = title;
mIndicatorColor = indicatorColor;
mDividerColor = dividerColor;
}
Fragment createFragment() {
return IndexFragment.newInstance(mTitle, mIndicatorColor, mDividerColor);
}
CharSequence getTitle() {
return mTitle;
}
int getIndicatorColor() {
return mIndicatorColor;
}
int getDividerColor() {
return mDividerColor;
}
}
class SamplePagerAdapter extends FragmentPagerAdapter {
SamplePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return mTabs.get(i).createFragment();
}
@Override
public int getCount() {
return mResources.length;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return o == view;
}
@Override
public CharSequence getPageTitle(int position) {
return getResources().getStringArray(R.array.sources)[position];
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
IndexFragment
//IndexFragment.java
public class IndexFragment extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String KEY_TITLE = "title";
private static final String KEY_INDICATOR_COLOR = "indicator_color";
private static final String KEY_DIVIDER_COLOR = "divider_color";
private int mBank;
private int mQId;
private Question question;
private Context context;
private CardView qCardView;
private CardView expCardView;
private CardListView ansCardView;
public static IndexFragment newInstance(CharSequence title, int indicatorColor,
int dividerColor) {
Bundle bundle = new Bundle();
bundle.putCharSequence(KEY_TITLE, title);
bundle.putInt(KEY_INDICATOR_COLOR, indicatorColor);
bundle.putInt(KEY_DIVIDER_COLOR, dividerColor);
IndexFragment fragment = new IndexFragment();
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle args = getArguments();
if (args != null) {
TextView title = (TextView) view.findViewById(R.id.item_title);
title.setText("Title: " + args.getCharSequence(KEY_TITLE));
int indicatorColor = args.getInt(KEY_INDICATOR_COLOR);
TextView indicatorColorView = (TextView) view.findViewById(R.id.item_indicator_color);
indicatorColorView.setText("Indicator: #" + Integer.toHexString(indicatorColor));
indicatorColorView.setTextColor(indicatorColor);
int dividerColor = args.getInt(KEY_DIVIDER_COLOR);
TextView dividerColorView = (TextView) view.findViewById(R.id.item_divider_color);
dividerColorView.setText("Divider: #" + Integer.toHexString(dividerColor));
dividerColorView.setTextColor(dividerColor);
}
}
public IndexFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_index, container, false);
}
}
布局
FragmentMain.xml
<?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">
<android.hadiyazdi.orthopaedicmcqs.widgets.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:color="@color/White"
android:background="@color/tab_background"/>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@color/Blue"/>
</LinearLayout>
FragmentIndex.xml
<?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"
android:background="@color/ForestGreen"
android:gravity="center">
<TextView
android:id="@+id/item_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST" />
<TextView
android:id="@+id/item_indicator_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/item_divider_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TEST" />
</LinearLayout>