1. Activity theme 必须记得修改,并且要注意和自己需要使用的theme的parent是否相同,如果不同,直接引用ViewPagerIndicator默认的theme则容易引起crash;此时需要自定stytle,如下:
<style name="CustomTabPageIndicator" parent="@style/AppBaseTheme">
<item name="android:background">@drawable/tab_indicator</item>
<item name="android:textSize">@dimen/middle_font</item>
<item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
<item name="android:dividerPadding">18dp</item>
<item name="android:showDividers">middle</item>
<item name="android:fadingEdge">horizontal</item>
<item name="android:fadingEdgeLength">8dp</item>
</style>
<style name="CustomTabPageIndicator.Text" parent="android:TextAppearance.Medium">
<item name="android:textColor">@drawable/selector_tabtext</item>
</style>
其中,"@style/AppBaseTheme"是我mainactivity所需要的自定义theme。
2. 子页面fragment ,如果不需要预加载,请加上懒加载。其中,setUserVisibleHint的生命周期是早于oncreate的,所以,如果操作和页面有关,必须先判断页面控件是否已经初始化。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
if(isVisibleToUser) {
isVisible = isVisibleToUser;
if (null!=productGridView) {//判断页面是否已onCreate
//做你想做的操作
}
} else {
isVisible = isVisibleToUser;
}
super.setUserVisibleHint(isVisibleToUser);
}
<pre class="java" name="code"> @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
context = getActivity();
View view = inflater.inflate(R.layout.fragment_product, container,
false);
// 获取父控件传递过来的参数
Bundle mBundle = getArguments();
if (mBundle != null) {
}
initwidget(view);
processLogic();
return view;
}
private void processLogic() {
if (isVisible) {
//你要做的操作
}
initPulltoRefreshGridView();
}
3. 子页面如果需要预加载,http请求不要用单列模式。如果使用单列模式,很可能导致后一个请求的handler覆盖前一个,从而引起一些显示异常。
4. 如果是在fragment中使用ViewPagerIndicator,则子页的fragmentManager,必须是:
fragmentManager = getChildFragmentManager();
否则,会出现缓存导致页面显示混乱的问题,即父fragment在被回收后,子fragment仍旧有可能存在于缓存。