使用Magicindicator和BRAVH打造一个新闻资讯类Demo

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,其他的代码不一一列出,欢迎大家指出问题。


猜你喜欢

转载自blog.csdn.net/weixin_40350174/article/details/79898697