【GT-安卓应用开发之ViewPager+Fragment实现TAB切换】
前言:话不多说,先看效果
步骤:
Step1,界面布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.administrator.parentproject.activity.MyCollectActivity"> <RelativeLayout style="@style/TitleStyle_Relative"> <ImageView android:id="@+id/back" style="@style/TitleStyle_Back" android:layout_alignParentBottom="true" /> <TextView android:id="@+id/title_tv" style="@style/TitleStyle_Text" android:layout_centerHorizontal="true" android:text="收藏" /> </RelativeLayout> <LinearLayout android:layout_marginTop="@dimen/dp_10" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RadioGroup android:id="@+id/group" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginTop="5dp" android:orientation="horizontal" > <RadioButton android:id="@+id/btnCourse" android:layout_width="100dp" android:layout_height="30dp" android:layout_weight="1" android:background="@drawable/btn_shape_left" android:button="@null" android:checked="true" android:gravity="center" android:text="课程" android:textColor="#000000" /> <RadioButton android:id="@+id/btnDynamic" android:layout_width="100dp" android:layout_height="30dp" android:layout_weight="1" android:background="@drawable/btn_shape" android:button="@null" android:checked="true" android:gravity="center" android:text="动态" android:textColor="#919191" /> </RadioGroup> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_marginTop="@dimen/dp_10" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
Step2,定义碎片列表,初始化ViewPager
Coursefragment sFragment = new Coursefragment(); fragmentList = new ArrayList<Fragment>(); fragmentList.add(sFragment); DynamicFragment fFragment = new DynamicFragment(); fragmentList.add(fFragment); adapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList); viewPager.setAdapter(adapter); viewPager.setCurrentItem(0); viewPager.setOnPageChangeListener((ViewPager.OnPageChangeListener) new MyOnPageChangeListener());
Step3,定义MyOnPageChangeListener
private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{ @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub switch (arg0) { case 0: btnCourse.setTextColor(Color.parseColor("#000000")); btnDynamic.setTextColor(Color.parseColor("#919191")); break; case 1: btnCourse.setTextColor(Color.parseColor("#919191")); btnDynamic.setTextColor(Color.parseColor("#000000")); break; } } }
Step4,GroupButton与ViewPager关联
group.setOnCheckedChangeListener((RadioGroup.OnCheckedChangeListener) new MyCheckChangeListener()); private class MyCheckChangeListener implements RadioGroup.OnCheckedChangeListener{ @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (checkedId) { case R.id.btnCourse: viewPager.setCurrentItem(0,false); break; case R.id.btnDynamic: viewPager.setCurrentItem(1,false); break; } } }
Step5,碎片实现(两个碎片功能相近,这里只贴出课程收藏碎片的代码)
public class Coursefragment extends BaseFragment { @BindView(R.id.ywjl_lv) LRecyclerView ywjlLv; private CourseAdapter mCollectAdapter; private LRecyclerViewAdapter mLRecyclerViewAdapter; private SharedPreferencesHelper shared; private String token, userId; private CommitParam commitParam; private Call<ResponseBody> data; private Map<String, String> map; /** * 服务器端一共多少条数据 */ private static final int TOTAL_COUNTER = 1000;//如果服务器没有返回总数据或者总页数,这里设置为最大值比如10000,什么时候没有数据了根据接口返回判断 /** * 每一页展示多少条数据 */ private static final int REQUEST_COUNT = 10; /** * 已经获取到多少条数据了 */ private static int mCurrentCounter = 0; private boolean isLoadMore = false; int page = 0; private ArrayList<Course.ResultBean> mList; private WeakHandler mHandler = new WeakHandler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: case 1: if (!isLoadMore) { page = 0; } collectList(String.valueOf(page)); break; case -3: ywjlLv.refreshComplete(REQUEST_COUNT); ywjlLv.setOnNetWorkErrorListener(new OnNetWorkErrorListener() { @Override public void reload() { } }); break; default: break; } } }; @Override protected boolean isLazyLoad() { return false; } @Override protected int getContentLayout() { return R.layout.fragment_collect; } @Override protected void initView() { } @Override protected void initData() { shared = new SharedPreferencesHelper(getActivity(), "user"); token = shared.getSharedPreference("token", "").toString(); userId = shared.getSharedPreference("userid", 0).toString(); mList = new ArrayList<Course.ResultBean>(); MyGridLayoutManager manager = new MyGridLayoutManager(MyApplication.getContextObject(), 2, LinearLayoutManager.VERTICAL, false); ywjlLv.setLayoutManager(manager); mCollectAdapter = new CourseAdapter(MyApplication.getContextObject(), R.layout.new_course_item, "sckc"); mLRecyclerViewAdapter = new LRecyclerViewAdapter(mCollectAdapter); ywjlLv.setAdapter(mLRecyclerViewAdapter); mHandler.sendEmptyMessage(1); } @Override protected void setListener() { ywjlLv.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { isLoadMore = false; mHandler.sendEmptyMessage(1); } }); ywjlLv.setLoadMoreEnabled(false); mLRecyclerViewAdapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View view, int position) { Intent intent = new Intent(MyApplication.getContextObject(), CoursePlayActivity.class); intent.putExtra("csid", mList.get(position).getId()); intent.putExtra("title", mList.get(position).getCsName()); startActivity(intent); } }); } private void collectList(String page) { commitParam = new CommitParam(); commitParam.setToken(token); map = commitParam.getData(); Call<ResponseBody> data = RetrofitBean.getApi2().getDataCourse("get_course_collects", map); data.enqueue(new SimpleCallBack("课程收藏列表") { @Override protected void showData(int i, String json) { super.showData(i, json); Gson gson = new Gson(); Course yg = gson.fromJson(json, Course.class); if (!isLoadMore) { mList.clear(); mCollectAdapter.clear(); mCurrentCounter = 0; } mList.addAll(yg.getResult()); mCollectAdapter.addAll(yg.getResult()); ywjlLv.refreshComplete(REQUEST_COUNT); } @Override protected void showData(String msg) { if (!isLoadMore) { mList.clear(); mCollectAdapter.setDataList(mList); //禁用自动加载更多功能 mCurrentCounter = 0; } else { ywjlLv.setNoMore(true); Toast.makeText(MyApplication.getContextObject(), "暂无更多数据", Toast.LENGTH_SHORT).show(); } ywjlLv.refreshComplete(REQUEST_COUNT); } }); } }