最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

ViewPager+Fragment+广播来实现一个滑动页面切换_html/css

来源:动视网 责编:小采 时间:2020-11-27 16:01:43
文档

ViewPager+Fragment+广播来实现一个滑动页面切换_html/css

ViewPager+Fragment+广播来实现一个滑动页面切换_html/css_WEB-ITnose:要实现这样一个页面,上面的好说,下面的是一个滑动视图,我们想到的是用viewpager来实现,但是这个有一个问题,按照平时的写法,我们会写5个Activity放到viewpager里面去,这自然是可以实现的。但是这里有一个问题,一进来,在主界面manager.sta
推荐度:
导读ViewPager+Fragment+广播来实现一个滑动页面切换_html/css_WEB-ITnose:要实现这样一个页面,上面的好说,下面的是一个滑动视图,我们想到的是用viewpager来实现,但是这个有一个问题,按照平时的写法,我们会写5个Activity放到viewpager里面去,这自然是可以实现的。但是这里有一个问题,一进来,在主界面manager.sta


要实现这样一个页面,上面的好说,下面的是一个滑动视图,我们想到的是用viewpager来实现,但是这个有一个问题,按照平时的写法,我们会写5个Activity放到viewpager里面去,这自然是可以实现的。但是这里有一个问题,一进来,在主界面manager.startActivity(id, intent).getDecorView();来取得view加到viewpager里,这样一启动,五个子界面都同时启动,都去加载数据,会导致很卡,也浪费了资源,我们想法是,默认只加载第一个页面,滑到第二个才开始加载第二个的数据,但是通过监听事件发现,一开始启动,五个Activity的oncreate方法都运行了。再滑动切换,是没有任何监听或者实现方法得到调用的。


这里后来想到了另外一个方法:我们用viewpager+5个Fragment+广播机制去通知他更新。

在主界面我们可以这样写。

/**	 * 初始化PageViewer	 */	List list;	FragmentPagerAdapter myPagerAdapter;	FragmentManager SupportfragmentManager = getSupportFragmentManager();	private void initPagerViewer(){	Label1AllOrder lable1 = new Label1AllOrder();	Label2WinPrizeOrder lable2 = new Label2WinPrizeOrder();	Label3WaitForLotteryOrder lable3 = new Label3WaitForLotteryOrder();	Label4ZhuiHaoOrder lable4 = new Label4ZhuiHaoOrder();	Label5BuyTogetherOrder lable5 = new Label5BuyTogetherOrder();	list = new ArrayList(); 	list.add(lable1);	list.add(lable2);	list.add(lable3);	list.add(lable4);	list.add(lable5);	myPagerAdapter = new MyPagerAdapter(SupportfragmentManager); view_pager.setAdapter(myPagerAdapter); view_pager.setOnPageChangeListener(new MyOnPageChangeListener()); 	}	/**	 * Pager适配器	 */	public class MyPagerAdapter extends FragmentPagerAdapter {	public MyPagerAdapter(FragmentManager fm) {	super(fm);	}	@Override	public Fragment getItem(int arg0) {	return list.get(arg0); 	}	@Override	public int getCount() {	return list.size();	}	/*@Override	public Object instantiateItem(View arg0, int arg1) {	//ViewPager pViewPager = ((ViewPager) arg0);	//pViewPager.addView(list.get(arg1).getView());	return list.get(arg1);	}	@Override	public void destroyItem(ViewGroup container, int position, Object object) {	//ViewPager pViewPager = ((ViewPager) container);	//pViewPager.removeView(list.get(position).getView());	}*/	}	private void sendBroadcastDoRefreshByCurrentIndex(){	switch (currentIndex) {	case 0:	sendBroadcastDoRefresh("action.Label1AllOrder");	break;	case 1:	sendBroadcastDoRefresh("action.Label2WinPrizeOrder");	break;	case 2:	sendBroadcastDoRefresh("action.Label3WaitForLotteryOrder");	break;	case 3:	sendBroadcastDoRefresh("action.Label4ZhuiHaoOrder");	break;	case 4:	sendBroadcastDoRefresh("action.Label5BuyTogetherOrder");	break;	default:	break;	}	}	Intent broadCastIntent = new Intent();	// 广播通知	private void sendBroadcastDoRefresh(String action){	broadCastIntent.setAction(action); sendBroadcast(broadCastIntent);	}	/**	 * 页卡切换监听	 */	private int currentIndex = 0;	public class MyOnPageChangeListener implements OnPageChangeListener {	@Override	public void onPageSelected(int index) {	currentIndex = index;	System.out.println("-onPageSelected--------" + index);	initViewPagePoint(index);	switch (index) {	case 0:	sendBroadcastDoRefresh("action.Label1AllOrder");	view_pager_tip.setText("全部订单");	break;	case 1:	sendBroadcastDoRefresh("action.Label2WinPrizeOrder");	view_pager_tip.setText("中奖订单");	break;	case 2:	sendBroadcastDoRefresh("action.Label3WaitForLotteryOrder");	view_pager_tip.setText("待开奖订单");	break;	case 3:	sendBroadcastDoRefresh("action.Label4ZhuiHaoOrder");	view_pager_tip.setText("追号订单");	break;	case 4:	sendBroadcastDoRefresh("action.Label5BuyTogetherOrder");	view_pager_tip.setText("合买订单");	break;	default:	break;	}	}	@Override	public void onPageScrollStateChanged(int arg0) {	 	}	@Override	public void onPageScrolled(int arg0, float arg1, int arg2) {	}	}

每滑动一下,就发送广播,通知子界面去更新。但是是不是每次更新就有他自己控制了

在五个子Fragment我们可以这样写:其实这里五个是相似了。我就贴一个的代码

public class Label2WinPrizeOrder extends Fragment implements OnClickListener {	Activity activity = Label2WinPrizeOrder.this.getActivity();	 	@Override	public void onCreate(Bundle savedInstanceState) {	super.onCreate(savedInstanceState);	LayoutInflater inflater = getActivity().getLayoutInflater();	mainView = inflater.inflate(R.layout.my_lottery_user_center_label2_win_prize, (ViewGroup)getActivity().findViewById(R.id.my_lottery_user_center_viewpage), false);	initUI();	 	initNoDataUI();	//注册刷新广播	IntentFilter intentFilter = new IntentFilter();	intentFilter.addAction("action.Label2WinPrizeOrder");	getActivity().registerReceiver(mRefreshBroadcastReceiver, intentFilter);	 	}	@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 	ViewGroup p = (ViewGroup) mainView.getParent();	if(p!=null){	p.removeAllViewsInLayout();	}	return mainView; }	@Override	public void onActivityCreated(Bundle savedInstanceState) {	super.onActivityCreated(savedInstanceState);	}	 	// broadcast receiver	private BroadcastReceiver mRefreshBroadcastReceiver = new BroadcastReceiver() {	@Override	public void onReceive(Context context, Intent intent) {	String action = intent.getAction();	if (action.equals("action.Label2WinPrizeOrder")) {	System.out.println("---------------action.Label2WinPrizeOrder"); 	if (AutoUpdate.isNetworkAvailable(activity)) {	if(canLoadAgain){	loadingRelativelayout.setVisibility(View.VISIBLE);	noDataLinearlayout.setVisibility(View.GONE);	hasDataLinearlayout.setVisibility(View.GONE);	updateInitLotteryInfo();	page = 0;	mListView.mEndRootView.setVisibility(View.GONE);	mListView.setAutoLoadMore(true);	mListView.setCanRefresh(true);	new getDataTask().execute(1);	}	}	setK3ballVisible();	}	}	};	//初设化彩种信息	private void updateInitLotteryInfo(){	if(MyLotterActivity.labelsListData != null && MyLotterActivity.labelsListData.size() >= 2){	MyLotteryLabelBean bean = MyLotterActivity.labelsListData.get(1);	if(FunctionUtil.strNotNull(bean.getLottery_type_index())){	if("308".equals(bean.getLottery_type_index())){	lottery_type_index = 308;	}else if("309".equals(bean.getLottery_type_index())){	lottery_type_index = 309;	}else if("310".equals(bean.getLottery_type_index())){	lottery_type_index = 310;	}	}	if(FunctionUtil.strNotNull(bean.getTitle())){	title = bean.getTitle();	}	tipTextview.setText(title);	}	}	private void initUI() {	activity = getActivity();	loadingRelativelayout = (LinearLayout) mainView.findViewById(R.id.my_lottery_user_center_label2_loading_rel);	loadAgainRelativelayout = (RelativeLayout) mainView.findViewById(R.id.my_lottery_user_center_label2_load_again_rel);	hasDataLinearlayout = (LinearLayout) mainView.findViewById(R.id.my_lottery_user_center_label2_has_data_linear);	noDataLinearlayout = (LinearLayout) mainView.findViewById(R.id.my_lottery_user_center_label2_no_data_linear);
	}

这样。我们每次滑动一次就能在五个子类,得到一次广播通知。就让他去加载数据,当第二次在滑动到那个,他依然可以收到广播,至于要不要再去刷新数据,就看你怎么控制了。

文档

ViewPager+Fragment+广播来实现一个滑动页面切换_html/css

ViewPager+Fragment+广播来实现一个滑动页面切换_html/css_WEB-ITnose:要实现这样一个页面,上面的好说,下面的是一个滑动视图,我们想到的是用viewpager来实现,但是这个有一个问题,按照平时的写法,我们会写5个Activity放到viewpager里面去,这自然是可以实现的。但是这里有一个问题,一进来,在主界面manager.sta
推荐度:
标签: 一个 页面 实现
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top