ホームページ >ウェブフロントエンド >htmlチュートリアル >ViewPager+Fragment+broadcast でスライド ページ切り替えを実装_html/css_WEB-ITnose
このようなページを実装するには、上記は簡単に言うと以下のようになります。考えられるのは、viewpager を使用して実装することですが、問題があります。これは通常の書き方に従って、5 つのアクティビティを記述してビューページャーに配置することになります。しかし、ここで問題が発生します。開始すると、メイン インターフェイスの manager.startActivity(id,tent).getDecorView(); に移動してビューを取得し、それをビューページャーに追加します。これは、デフォルトでは最初のページのみを読み込み、2 番目のページにスライドした後にのみ 2 番目のページのデータの読み込みを開始するというものです。イベントの監視を通じて、最初に 5 つのアクティビティが作成され、すべてのメソッドが実行されていることがわかりました。再度スライドして切り替える場合、監視メソッドや実装メソッドは呼び出されません。
私は後で別の方法を考えました。viewpager+5 Fragments+broadcast メカニズムを使用して更新を通知します。
メインインターフェイスでは次のように書くことができます。
/** * 初始化PageViewer */ List<Fragment> 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<Fragment>(); 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) { } }
5 つのサブフラグメントでは、次のように書くことができます: 実際、ここにある 5 つは似ています。こんな感じでコード
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);
<span style="white-space:pre"> </span>}
を投稿します。スワイプするたびに、5 つのサブカテゴリでブロードキャスト通知を受け取ることができます。もう一度そのポイントにスライドしても、データを再度更新するかどうかは、制御方法によって異なります。