android SlidingTabLayout实现ViewPager页卡滑动效果

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

技术分享


主页面布局文件 remind_auction_new_list.xml :

<RelativeLayout
    style="@style/Rosemary.Plane"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <!--头部布局-->
    <com.liam.rosemary.ui.view.SlidingTabLayout
        android:id="@+id/stl_square"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <!--内容页-->
    <android.support.v4.view.ViewPager
        android:id="@+id/vp_square"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/stl_square"/>

    <!--分割线-->
    <ImageView
        style="@style/Rosemary.Line"
        android:layout_below="@id/stl_square"
        android:src="@drawable/horizontal_shadow"/>

</RelativeLayout>



主页面代码:

public class MyRemindAuctionNewListActivity extends ActionBarActivity implements IInit {

    private SlidingTabLayout mSlidingTabLayout;
    private ViewPager mViewPager;

    private RemindAdapter mRemindAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.remind_auction_new_list);

        init();
    }

    @Override
    public void init() {
        ActionBarUtil.setup(this, R.string.my_remind);

        mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.stl_square);
        mViewPager =(ViewPager)findViewById(R.id.vp_square);

        // 设置ViewPager属性
        mRemindAdapter = new RemindAdapter(getSupportFragmentManager(), this);
        mViewPager.setOffscreenPageLimit(2);
        mViewPager.setAdapter(mRemindAdapter);

        // 定义 SlidingTabLayout
        mSlidingTabLayout.setDistributeEvenly(true);
        mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.primary));
        mSlidingTabLayout.setBackgroundColor(getResources().getColor(R.color.white));
        mSlidingTabLayout.setCustomTabView(R.layout.view_tab, R.id.tv_text);
        mSlidingTabLayout.setViewPager(mViewPager); // 加载ViewPager

    }

}


为ViewPager添加多个页卡的Adapter:

public class RemindAdapter extends FragmentStatePagerAdapter {

    private String[] titles;
    private Context ctx;

    public RemindAdapter(FragmentManager fm, Context ctx) {
        super(fm);
        this.ctx = ctx;
        titles = ctx.getResources().getStringArray(R.array.remind_type);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {//专场提醒
            return MyRemindAuctionListFragment.newInstance(0);
        } else {//卖家提醒
            return MyRemindSallerListFragment.newInstance(1);
        }
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public int getCount() {
        return titles.length;
    }
}


每个页卡实际内容的Fragment:

public class MyRemindAuctionListFragment extends BaseFragment implements IPagination, IResponseHandler, SwipeRefreshLayout.OnRefreshListener {

    private int mTag;
    private ListView mListView;//拍场列表
    private ListAdapter<AuctionInfoViewModel> mAdapter;//拍场适配器
    private MyRemindAuctionNewListActivity mActivity;

    //下拉刷新组件
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private AuctionInfoViewModel mViewModel = new AuctionInfoViewModel();
    private TextView mEmptyView;   // 空白视图

    public static MyRemindAuctionListFragment newInstance(int tag) {
        MyRemindAuctionListFragment f = new MyRemindAuctionListFragment();
        f.mTag = tag;
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.remind_auction_list, null);

        mSwipeRefreshLayout = $(v, R.id.srl_refresh);
        mListView = $(v, R.id.remind_auction_listview);
        mEmptyView = $(v, R.id.tv_remind_warning);

        mSwipeRefreshLayout.setOnRefreshListener(this);
        mSwipeRefreshLayout.setColorSchemeResources(R.color.background_blue_standard, R.color.white, R.color.background_blue_standard, R.color.white);
        fetchData(FIRST);

        return v;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        if (activity instanceof MyRemindAuctionNewListActivity) {
            mActivity = ((MyRemindAuctionNewListActivity) activity);
        }
    }

    @Override
    public void fetchNewData(int tag) {
        mViewModel.increasePageIndex();
        fetchData(FIRST);
    }

    @Override
    public void fetchData(int tag) {
        mActivity.toggleProgress(true);
        GetMyRemindAuctionListParam param = new GetMyRemindAuctionListParam(Data.getUserID(), mViewModel.getPageIndex(), Data.PAGE_SIZE_MEDIUM);
        AuctionApi.getMyRemindAuctionList(this, param);
    }

    @Override
    public void updateUI(Object response, int tag) {
        mActivity.toggleProgress(false);
        mSwipeRefreshLayout.setRefreshing(false);

        mViewModel.inflate(response);

        if (mAdapter == null) {

            mAdapter = new ListAdapter<AuctionInfoViewModel>(mActivity, mViewModel.getList(), R.layout.item_list_remind_auction) {
                @Override
                protected void onBind(int position, AuctionInfoViewModel item, ViewHolder holder) {
                    holder.setImageUrl(R.id.head_icon, item.getImageUrl());
                    holder.setText(R.id.title, item.getAuctionIDStr());
                    holder.setText(R.id.sub_title, item.getAuctionName());
                    holder.setText(R.id.tv_auction_status, item.getStatusStr());
                    ((TextView) holder.get(R.id.tv_auction_status)).setTextColor(getResources().getColor(item.getColor()));
                }
            };

            mListView.setAdapter(mAdapter);
            mEmptyView.setText(R.string.notice_auction_no_remind);
            mEmptyView.setGravity(Gravity.CENTER);
            mListView.setEmptyView(mEmptyView);

            /**
             *  上拉更多
             */
            mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
                    switch (scrollState) {
                        case SCROLL_STATE_IDLE:

                            if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {
                                if (!mViewModel.isComplete()) {
                                    fetchNewData(FIRST);
                                }
                            }
                            break;
                    }
                }

                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                }
            });
        } else {
            mAdapter.notifyDataSetChanged();
        }

        mListView.setOnItemClickListener(new onItemClickListener());
    }

    @Override
    public void onRefresh() {
        refresh();
    }

    @Override
    public void refresh() {// 重置页索引、适配器
        mViewModel.reset();
        fetchData(FIRST);
    }

    @Override
    public int getTotal() {
        if (mAdapter == null) return 0;
        return mAdapter.getCount();
    }

    /**
     * 监听事件,以此启动不同页面
     */
    class onItemClickListener implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            int temp = mViewModel.getList().get(position).getStatus();
            int auctionID = mViewModel.getList().get(position).getAuctionID();

            Intent mIntent = new Intent();
            switch (temp) {
                case 1:
                    mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
                    break;
                case 2:
                    mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
                    break;
                case 3:
                    mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
                    break;
                default:
                    break;
            }
            mIntent.putExtra(EnumIntentKey.AUCTION_ID.toString(), auctionID);
            startActivity(mIntent);
        }
    }
}




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。