android SlidingTabLayout实现ViewPager页卡滑动效果

先来张效果图(可以滑动切换页卡)

 

主页面布局文件 remind_auction_new_list.xml :

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <RelativeLayout  
  2.     style="@style/Rosemary.Plane"  
  3.     xmlns:android="http://schemas.android.com/apk/res/android">  
  4.   
  5.     <!--头部布局-->  
  6.     <com.liam.rosemary.ui.view.SlidingTabLayout  
  7.         android:id="@+id/stl_square"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="wrap_content"/>  
  10.   
  11.     <!--内容页-->  
  12.     <android.support.v4.view.ViewPager  
  13.         android:id="@+id/vp_square"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="match_parent"  
  16.         android:layout_below="@id/stl_square"/>  
  17.   
  18.     <!--分割线-->  
  19.     <ImageView  
  20.         style="@style/Rosemary.Line"  
  21.         android:layout_below="@id/stl_square"  
  22.         android:src="@drawable/horizontal_shadow"/>  
  23.   
  24. </RelativeLayout>  

 

 


主页面代码:

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class MyRemindAuctionNewListActivity extends ActionBarActivity implements IInit {  
  2.   
  3.     private SlidingTabLayout mSlidingTabLayout;  
  4.     private ViewPager mViewPager;  
  5.   
  6.     private RemindAdapter mRemindAdapter;  
  7.   
  8.     @Override  
  9.     protected void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.remind_auction_new_list);  
  12.   
  13.         init();  
  14.     }  
  15.   
  16.     @Override  
  17.     public void init() {  
  18.         ActionBarUtil.setup(this, R.string.my_remind);  
  19.   
  20.         mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.stl_square);  
  21.         mViewPager =(ViewPager)findViewById(R.id.vp_square);  
  22.   
  23.         // 设置ViewPager属性  
  24.         mRemindAdapter = new RemindAdapter(getSupportFragmentManager(), this);  
  25.         mViewPager.setOffscreenPageLimit(2);  
  26.         mViewPager.setAdapter(mRemindAdapter);  
  27.   
  28.         // 定义 SlidingTabLayout  
  29.         mSlidingTabLayout.setDistributeEvenly(true);  
  30.         mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.primary));  
  31.         mSlidingTabLayout.setBackgroundColor(getResources().getColor(R.color.white));  
  32.         mSlidingTabLayout.setCustomTabView(R.layout.view_tab, R.id.tv_text);  
  33.         mSlidingTabLayout.setViewPager(mViewPager); // 加载ViewPager  
  34.   
  35.     }  
  36.   
  37. }  

 

 

为ViewPager添加多个页卡的Adapter:

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class RemindAdapter extends FragmentStatePagerAdapter {  
  2.   
  3.     private String[] titles;  
  4.     private Context ctx;  
  5.   
  6.     public RemindAdapter(FragmentManager fm, Context ctx) {  
  7.         super(fm);  
  8.         this.ctx = ctx;  
  9.         titles = ctx.getResources().getStringArray(R.array.remind_type);  
  10.     }  
  11.   
  12.     @Override  
  13.     public Fragment getItem(int position) {  
  14.         if (position == 0) {//专场提醒  
  15.             return MyRemindAuctionListFragment.newInstance(0);  
  16.         } else {//卖家提醒  
  17.             return MyRemindSallerListFragment.newInstance(1);  
  18.         }  
  19.     }  
  20.   
  21.     @Override  
  22.     public CharSequence getPageTitle(int position) {  
  23.         return titles[position];  
  24.     }  
  25.   
  26.     @Override  
  27.     public int getCount() {  
  28.         return titles.length;  
  29.     }  
  30. }  

 

 

每个页卡实际内容的Fragment:

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
    1. public class MyRemindAuctionListFragment extends BaseFragment implements IPagination, IResponseHandler, SwipeRefreshLayout.OnRefreshListener {  
    2.   
    3.     private int mTag;  
    4.     private ListView mListView;//拍场列表  
    5.     private ListAdapter<AuctionInfoViewModel> mAdapter;//拍场适配器  
    6.     private MyRemindAuctionNewListActivity mActivity;  
    7.   
    8.     //下拉刷新组件  
    9.     private SwipeRefreshLayout mSwipeRefreshLayout;  
    10.     private AuctionInfoViewModel mViewModel = new AuctionInfoViewModel();  
    11.     private TextView mEmptyView;   // 空白视图  
    12.   
    13.     public static MyRemindAuctionListFragment newInstance(int tag) {  
    14.         MyRemindAuctionListFragment f = new MyRemindAuctionListFragment();  
    15.         f.mTag = tag;  
    16.         return f;  
    17.     }  
    18.   
    19.     @Override  
    20.     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {  
    21.         View v = inflater.inflate(R.layout.remind_auction_list, null);  
    22.   
    23.         mSwipeRefreshLayout = $(v, R.id.srl_refresh);  
    24.         mListView = $(v, R.id.remind_auction_listview);  
    25.         mEmptyView = $(v, R.id.tv_remind_warning);  
    26.   
    27.         mSwipeRefreshLayout.setOnRefreshListener(this);  
    28.         mSwipeRefreshLayout.setColorSchemeResources(R.color.background_blue_standard, R.color.white, R.color.background_blue_standard, R.color.white);  
    29.         fetchData(FIRST);  
    30.   
    31.         return v;  
    32.     }  
    33.   
    34.     @Override  
    35.     public void onAttach(Activity activity) {  
    36.         super.onAttach(activity);  
    37.   
    38.         if (activity instanceof MyRemindAuctionNewListActivity) {  
    39.             mActivity = ((MyRemindAuctionNewListActivity) activity);  
    40.         }  
    41.     }  
    42.   
    43.     @Override  
    44.     public void fetchNewData(int tag) {  
    45.         mViewModel.increasePageIndex();  
    46.         fetchData(FIRST);  
    47.     }  
    48.   
    49.     @Override  
    50.     public void fetchData(int tag) {  
    51.         mActivity.toggleProgress(true);  
    52.         GetMyRemindAuctionListParam param = new GetMyRemindAuctionListParam(Data.getUserID(), mViewModel.getPageIndex(), Data.PAGE_SIZE_MEDIUM);  
    53.         AuctionApi.getMyRemindAuctionList(this, param);  
    54.     }  
    55.   
    56.     @Override  
    57.     public void updateUI(Object response, int tag) {  
    58.         mActivity.toggleProgress(false);  
    59.         mSwipeRefreshLayout.setRefreshing(false);  
    60.   
    61.         mViewModel.inflate(response);  
    62.   
    63.         if (mAdapter == null) {  
    64.   
    65.             mAdapter = new ListAdapter<AuctionInfoViewModel>(mActivity, mViewModel.getList(), R.layout.item_list_remind_auction) {  
    66.                 @Override  
    67.                 protected void onBind(int position, AuctionInfoViewModel item, ViewHolder holder) {  
    68.                     holder.setImageUrl(R.id.head_icon, item.getImageUrl());  
    69.                     holder.setText(R.id.title, item.getAuctionIDStr());  
    70.                     holder.setText(R.id.sub_title, item.getAuctionName());  
    71.                     holder.setText(R.id.tv_auction_status, item.getStatusStr());  
    72.                     ((TextView) holder.get(R.id.tv_auction_status)).setTextColor(getResources().getColor(item.getColor()));  
    73.                 }  
    74.             };  
    75.   
    76.             mListView.setAdapter(mAdapter);  
    77.             mEmptyView.setText(R.string.notice_auction_no_remind);  
    78.             mEmptyView.setGravity(Gravity.CENTER);  
    79.             mListView.setEmptyView(mEmptyView);  
    80.   
    81.             /** 
    82.              *  上拉更多 
    83.              */  
    84.             mListView.setOnScrollListener(new AbsListView.OnScrollListener() {  
    85.                 @Override  
    86.                 public void onScrollStateChanged(AbsListView view, int scrollState) {  
    87.                     switch (scrollState) {  
    88.                         case SCROLL_STATE_IDLE:  
    89.   
    90.                             if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {  
    91.                                 if (!mViewModel.isComplete()) {  
    92.                                     fetchNewData(FIRST);  
    93.                                 }  
    94.                             }  
    95.                             break;  
    96.                     }  
    97.                 }  
    98.   
    99.                 @Override  
    100.                 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {  
    101.                 }  
    102.             });  
    103.         } else {  
    104.             mAdapter.notifyDataSetChanged();  
    105.         }  
    106.   
    107.         mListView.setOnItemClickListener(new onItemClickListener());  
    108.     }  
    109.   
    110.     @Override  
    111.     public void onRefresh() {  
    112.         refresh();  
    113.     }  
    114.   
    115.     @Override  
    116.     public void refresh() {// 重置页索引、适配器  
    117.         mViewModel.reset();  
    118.         fetchData(FIRST);  
    119.     }  
    120.   
    121.     @Override  
    122.     public int getTotal() {  
    123.         if (mAdapter == null) return 0;  
    124.         return mAdapter.getCount();  
    125.     }  
    126.   
    127.     /** 
    128.      * 监听事件,以此启动不同页面 
    129.      */  
    130.     class onItemClickListener implements AdapterView.OnItemClickListener {  
    131.         @Override  
    132.         public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
    133.   
    134.             int temp = mViewModel.getList().get(position).getStatus();  
    135.             int auctionID = mViewModel.getList().get(position).getAuctionID();  
    136.   
    137.             Intent mIntent = new Intent();  
    138.             switch (temp) {  
    139.                 case 1:  
    140.                     mIntent.setClass(getActivity(), AuctionPreviewActivity.class);  
    141.                     break;  
    142.                 case 2:  
    143.                     mIntent.setClass(getActivity(), AuctionPreviewActivity.class);  
    144.                     break;  
    145.                 case 3:  
    146.                     mIntent.setClass(getActivity(), AuctionPreviewActivity.class);  
    147.                     break;  
    148.                 default:  
    149.                     break;  
    150.             }  
    151.             mIntent.putExtra(EnumIntentKey.AUCTION_ID.toString(), auctionID);  
    152.             startActivity(mIntent);  
    153.         }  
    154.     }  
    155. }  
posted @ 2016-12-30 15:06  天涯海角路  阅读(365)  评论(0)    收藏  举报