Magicindicator——一个好用的的可以结合Viewpager指示器 可以参考我的上一篇关于Magicindicator
BRAVH——一个好用的RecyclerView第三方类(强烈建议使用)!BRAVH官方介绍链接 点击打开链接
先上效果图:
这个Demo中用到的其他框架:
代码体系:
ok上代码:
/** * _ooOoo_ * o8888888o * 88" . "88 * (| -_- |) * O\ = /O * ____/`---'\____ * .' \\| |// `. * / \\||| : |||// \ * / _||||| -:- |||||- \ * | | \\\ - /// | | * | \_| ''\---/'' | | * \ .-\__ `-` ___/-. / * ___`. .' /--.--\ `. . __ * ."" '< `.___\_<|>_/___.' >'"". * | | : `- \`.;`\ _ /`;.`/ - ` : | | * \ \ `-. \_ __\ /__ _/ .-` / / * ======`-.____`-.___\_____/___.-`____.-'====== * `=---=' * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * 佛祖保佑 永无BUG * 佛曰: * 写字楼里写字间,写字间里程序员; * 程序人员写程序,又拿程序换酒钱。 * 酒醒只在网上坐,酒醉还来网下眠; * 酒醉酒醒日复日,网上网下年复年。 * 但愿老死电脑间,不愿鞠躬老板前; * 奔驰宝马贵者趣,公交自行程序员。 * 别人笑我忒疯癫,我笑自己命太贱; * 不见满街漂亮妹,哪个归得程序员? */ public class MainActivity extends AppCompatActivity { private List<Fragment> fragmentList; private List<IdBean> idBeans; MagicIndicator magicindicator; ViewPager viewpager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); viewpager = findViewById(R.id.viewpager); magicindicator = findViewById(R.id.Magicindicator); idBeans = new ArrayList<>(); initdata(); // viewPgerAdapter = new ViewPgerAdapter(getSupportFragmentManager(),fragmentList); // initMagicindicator(idBeans); } private void initdata() { //联网获取数据,获取Magicindicator的头部标签和 下文中获取咨询信息的id OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().url("").build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String responceText = response.body().string(); if (!responceText.isEmpty()) { JSONArray jsonArray = null; idBeans.clear(); try { jsonArray = new JSONArray(responceText); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); int id = jsonObject.getInt("id"); String title = jsonObject.getString("title"); IdBean idBean = new IdBean(id, title); idBeans.add(idBean); } runOnUiThread(new Runnable() { @Override public void run() { //将数据放入Magicindicator中 initMagicindicator(idBeans); } }); } catch (JSONException e) { e.printStackTrace(); } } } }); } private void initMagicindicator(final List<IdBean> idBeans) { //创建Fragment集合用来存放获取到每一个头部标签所对应的fragment fragmentList = new ArrayList<>(idBeans.size()); for (int i = 0; i < idBeans.size(); i++) { NewsFragment newsFragment = new NewsFragment(); Bundle bundle = new Bundle(); //将数据传入Fragment bundle.putInt("id", idBeans.get(i).getId()); newsFragment.setArguments(bundle); fragmentList.add(newsFragment); } viewpager.setAdapter(new ViewPgerAdapter(getSupportFragmentManager(), fragmentList)); magicindicator.setBackgroundColor(Color.WHITE); CommonNavigator commonNavigator = new CommonNavigator(this); //设置头部标签的滑动焦点位置 commonNavigator.setScrollPivotX(0.2f); commonNavigator.setAdapter(new CommonNavigatorAdapter() { @Override public int getCount() { return idBeans == null ? 0 : idBeans.size(); } @Override public IPagerTitleView getTitleView(Context context, final int index) { //设置头部标签类型 SimplePagerTitleView simplePagerTitleView = new SimplePagerTitleView(context); simplePagerTitleView.setPadding(Dp2PxUtil.Dp2Px(context, 20), Dp2PxUtil.Dp2Px(context, 6), Dp2PxUtil.Dp2Px(context, 20), Dp2PxUtil.Dp2Px(context, 6)); simplePagerTitleView.setNormalColor(R.color.colorPrimaryDark); simplePagerTitleView.setSelectedColor( R.color.colorPrimary); simplePagerTitleView.setText(MainActivity.this.idBeans.get(index).getContent()); simplePagerTitleView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { viewpager.setCurrentItem(index); } }); return simplePagerTitleView; } @Override public IPagerIndicator getIndicator(Context context) { //设置头部标签指示器 WrapPagerIndicator indicator = new WrapPagerIndicator(context); indicator.setFillColor(Color.parseColor("#DEE6F9")); indicator.setHorizontalPadding(Dp2PxUtil.Dp2Px(context, 10)); indicator.setRoundRadius(Dp2PxUtil.Dp2Px(context, 5)); return indicator; } }); magicindicator.setNavigator(commonNavigator); ViewPagerHelper.bind(magicindicator, viewpager); }
NewsFragment代码
public class NewsFragment extends Fragment { private int id; @BindView(R.id.recyclerview) RecyclerView recyclerview; Unbinder unbinder; private List<NewsFragmentBean> beans; private RecyclerViewAdapter recyclerViewAdapter; private boolean isMore = true; private int typeid; private int mPage; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.news_fragment_layout, container, false); // //设置滑动RecyclerView 的页数为2, // 因为每次我们滑动Viewpager的时候都会请求网络刷新RecyclerView的adapter,// // 如果我们一次性将所有的数据全部加载,// // 显然这种想法可行,但不推荐,所以后台数据也是定义了相应的页数id来返回相对应的页面数据,我们在代码中滑动viewpager第一次请求数据页数默认设置为1// // 每次滑动到最后一个item就会进行加载下面的数据,当然 BRAVH中有执行上拉刷新的代码,我们只需要调用就可以了// mPage = 2; beans = new ArrayList<>(); Bundle bundle = this.getArguments(); typeid = bundle.getInt("id"); // int pagerid = bundle.getInt("pager"); Log.e("typeid+pagerid", typeid + " "); okContentHttp(typeid); unbinder = ButterKnife.bind(this, view); return view; } private void okContentHttp(int id) { OkHttpClient okHttpClient = new OkHttpClient(); //每个fragment第一次加载数据,此处设置页面id默认设置为1 FormBody formBody = new FormBody.Builder().add("typeid", id + "").add("page", 1 + "").build(); Request request = new Request.Builder().post(formBody).url("").build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String responseText = response.body().string(); if (!responseText.isEmpty()) { Log.e("reponseText", responseText); JSONArray jsonArray = null; try { beans.clear(); jsonArray = new JSONArray(responseText); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String title = jsonObject.getString("title"); String titme = jsonObject.getString("time"); int comment = jsonObject.getInt("comment"); String source = jsonObject.getString("source"); String summary = jsonObject.getString("summary"); int id = jsonObject.getInt("id"); String thumbnail = jsonObject.getString("thumbnail"); Log.e("title", title + " " + titme); final NewsFragmentBean bean = new NewsFragmentBean(id, title, comment, thumbnail, source, titme, summary); beans.add(bean); getActivity().runOnUiThread(new Runnable() { @Override public void run() { recyclerViewAdapter = new RecyclerViewAdapter(R.layout.recycler_view_item_layout, beans); recyclerViewAdapter.openLoadAnimation(BaseQuickAdapter.SLIDEIN_LEFT);//设置RecyclerView加载的动画 recyclerViewAdapter.isFirstOnly(false);//设置动画不仅仅是第一次加载显示 LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); recyclerview.setLayoutManager(linearLayoutManager); recyclerview.setAdapter(recyclerViewAdapter); initView(beans); // recyclerViewAdapter.notifyDataSetChanged(); } }); } } catch (JSONException e) { e.printStackTrace(); } } } }); } private void initView(final List<NewsFragmentBean> beans) { //adpater添加新数据 recyclerViewAdapter.setNewData(beans); //adapter在上拉刷时进行加载数据 recyclerViewAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { if (beans.size() <= 10) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { recyclerViewAdapter.loadMoreEnd(); } }); } else if (isMore) { onLoadokContentHttp(typeid, mPage); } } }); } private void onLoadokContentHttp(int id, final int mPagea) { //每上加载数据一次,页面Id加一; mPage++; Log.e("mpageridloadok", mPagea + ""); OkHttpClient okHttpClient = new OkHttpClient(); FormBody formBody = new FormBody.Builder().add("typeid", id + "").add("page", mPagea + "").build(); Request request = new Request.Builder().post(formBody).url("").build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String responseText = response.body().string(); if (!responseText.equals("[]")) { Log.e("reponseText", responseText); JSONArray jsonArray = null; try { jsonArray = new JSONArray(responseText); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); String title = jsonObject.getString("title"); String titme = jsonObject.getString("time"); int comment = jsonObject.getInt("comment"); String source = jsonObject.getString("source"); String summary = jsonObject.getString("summary"); int id = jsonObject.getInt("id"); String thumbnail = jsonObject.getString("thumbnail"); Log.e("title", title + " " + titme); final NewsFragmentBean bean = new NewsFragmentBean(id, title, comment, thumbnail, source, titme, summary); beans.add(bean); getActivity().runOnUiThread(new Runnable() { @Override public void run() { initView(beans); recyclerViewAdapter.notifyDataSetChanged(); // recyclerViewAdapter.notifyItemChanged(mPagea); } }); } } catch (JSONException e) { e.printStackTrace(); } } else { getActivity().runOnUiThread(new Runnable() { @Override public void run() { //如果没有数据就设置停止加载,阻止上拉刷新 recyclerViewAdapter.loadMoreEnd(); return; } }); } } }); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); }
ok,其他的代码不一一列出,欢迎大家指出问题。