【笔记】关于ViewPagerIndicator的注意点

本文分享了使用ViewPagerIndicator组件时需要注意的几个关键点:自定义样式避免崩溃、Fragment懒加载实现方式、子页面预加载时避免单例模式引发的问题以及正确获取FragmentManager的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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仍旧有可能存在于缓存。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值