《笑话大全》APP代码详解4

本文详细讲解了《笑话大全》APP主页Fragment的实现,包括ViewPager和RadioGroup的初始化,以及下拉刷新功能的实现。getDataFromServer()函数用于请求网络数据,initView()函数中包含了简洁的视图设置。此APP作为作者的第一个完整项目,旨在总结学习过的知识点,欢迎读者指出可能存在的错误。
摘要由CSDN通过智能技术生成

《笑话大全》APP的最后一章,关于主页的Fragment,先看代码:

public class ContentFragment extends Fragment {
    //装载Fragment的View
    private View view;
    //主页面的RadioGroup和RadioButton
    private RadioGroup radioGroup;
    private RadioButton radioButton1,radioButton2;
    //主页上的ViewPager;
    private HomeViewPager homeViewPager;
    //装载ViewPager的两个View,也就是两个布局文件。
    private View view1,view2;
    //存储两个布局文件的List集合。
    private List<View> list;
    //主页底栏下的RadioGroup。
    private RadioGroup rg;
    //主页的文字ListView;
    private MyListView  textList;
    //附页的ListView
    private MyListView twoTextList;
    //Json数据对象
    private ArrayList<Result.Data> jokesDataList;
    private ArrayList<Result2.Data> twoJokesDataList;
    //ListView适配器
    private TextListAdapter listAdapter;
    //ListView附页适配器
    private TwoListAdapter twoListAdapter;
    //声明文字页下拉刷新控件
    private SwipeRefreshLayout swipeLayout;
    //声明附页下拉刷新控件
    private SwipeRefreshLayout twoSwipe;
    //API page页数字段值
    private int page=2;
    private int page2=2;
    private Result.Data data;
    private Result2.Data data2;
    private TimeStamp timeStamp=new TimeStamp();
    private String s;
    private String s1;

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        view=inflater.inflate(R.layout.fragment_content,null);
        homeViewPager=(HomeViewPager)view.findViewById(R.id.viewpager_home);
        rg=(RadioGroup)view.findViewById(R.id.radio_main);

        AdView adView=new AdView(getActivity(), AdSize.FIT_SCREEN);
        LinearLayout adLayout=(LinearLayout)view.findViewById(R.id.adLayout);
        adLayout.addView(adView);

        //初始化ViewPager的函数。
        initViewPagerData();
        initView();
        return view;
    }

    /**
     * 当加载更多数据时,就调用此方法
     * 请求成功后,在onSuccess()方法中调用processData()方法进行数据解析时,第二个参数传入的是true
     * 就会执行该方法中if语句中的else语句。
     */
    private void getMoreDataFromServer(){
        HttpUtils utils=new HttpUtils();
        //send就是发送请求。参数一代表获取数据。参数二是请求API的地址,
        utils.send(HttpRequest.HttpMethod.GET,URLList.CATEGORY_URL1+page+URLList.CATEGORY_URL2,
                    new RequestCallBack<String>() {

                        //请求成功
                        @Override
                        public void onSuccess(ResponseInfo<String> responseInfo) {
                            String result=responseInfo.result;
                            processData(result,true);
                        }

                        //请求失败
                        @Override
                        public void onFailure(HttpException e, String s) {
                            e.printStackTrace();
                            Toast.makeText(getActivity(),s,Toast.LENGTH_SHORT).show();
                        }



                    });

    }
    private void getMoreTwoFromServer(){
        s1 = timeStamp.getTimeStamp(8);
        if (s1!=null){
            HttpUtils utils=new HttpUtils();
            if (s1!=null){
                //send就是发送请求。参数一代表获取数据。参数二是请求API的地址,
                utils.send(HttpRequest.HttpMethod.GET,URLList.TWO_CATEGORY_URL1+page2+URLList.TWO_CATEGORY_URL2+s1
                        , new RequestCallBack<String>() {

                            //请求成功
                            @Override
                            public void onSuccess(ResponseInfo<String> responseInfo) {
                                String result=responseInfo.result;
                                processTwoData(result,true);
                            }

                            //请求失败
                            @Override
                            public void onFailure(HttpException e, String s) {
                                e.printStackTrace();
                                Toast.makeText(getActivity(),s,Toast.LENGTH_SHORT).show();
                            }



                        });
            }
        }



    }
    //此函数用于设置RadioButton的自定义图片的大小
    private void initView(){
        radioGroup = (RadioGroup)view.findViewById(R.id.radio_main);
        radioButton1 = (RadioButton)view.findViewById(R.id.radio_button1);
        radioButton2 = (RadioButton)view.findViewById(R.id.radio_button2);



        //定义底部标签图片大小
        Drawable jokeDrawable=getResources().getDrawable(R.drawable.tab_joke_selector,null);
        //第一0是距左右边距离,第二0是距上下边距离,第三长度,第四宽度
        jokeDrawable.setBounds(0,0,50,50);
        //设置到第二个参数意为将图片放上面,放入的参数位置不同,图片的摆放位置不同。也可以四个参数全部为null,当然这样的结果就是没有图片。
        radioButton1.setCompoundDrawables(null,jokeDrawable, null, null);

        Drawable photoDrawable= getResources().getDrawable(R.drawable.tab_photo_selector,null);
        photoDrawable.setBounds(0, 0,50,50);
        radioButton2.setCompoundDrawables(null,photoDrawable, null,null);


        //初始化底部标签
        radioGroup.check(R.id.radio_button1);// 默认勾选首页,初始化时候让首页默认勾选
    }
    //初始化主页ViewPager的数据
    private void initViewPagerData(){
        LayoutInflater layoutInflater=LayoutInflater.from(getContext());
        view1=layoutInflater.inflate(R.layout.viewpager_home1,null);
        view2=layoutInflater.inflate(R.layout.viewpager_home2,null);
        //实例化文字页SwipeRefreshLayout.(Google官方下拉刷新控件)
        swipeLayout=(SwipeRefreshLayout)view1.findViewById(R.id.swiperefresh_layout);
        //下拉监听器,刷新回调函数(一般用于更新UI)
        swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                getDataFromServer();
                //设置刷新完成,进度圆圈圈停止转动。
                swipeLayout.setRefreshing(false);
            }
        });
        //设置刷新小圆圈的进度颜色,旋转一圈即随机更改颜色。
        swipeLayout.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light,
                android.R.color.holo_orange_light, android.R.color.holo_red_light);
        // 设置手指在屏幕下拉多少距离会触发下拉刷新,200差不多了。其实默认的距离也很合适。
        swipeLayout.setDistanceToTriggerSync(200);
        //设置刷新控件的大小,这是默认选项。
        swipeLayout.setSize(SwipeRefreshLayout.DEFAULT);
        //ListView在View1的布局文件中,就必须在该布局文件中寻找Id并实例化,否则会空指针异常。
        textList=(MyListView)view1.findViewById(R.id.home_list);
        textList.setOnRefreshListener(new MyListView.OnRefreshListener() {
            @Override
            public void onLoadMore() {
                getMoreDataFromServer();
                if (data!=null) {
                    page++;
                }else{
                    page=2;
                    Toast.makeText(getContext(),"没有更多数据!",Toast.LENGTH_SHORT).show();
                }
            }
        });

        //附页List实例化
        twoTextList=(MyListView)view2.findViewById(R.id.two_list);
        twoTextList.setOnRefreshListener(new MyListView.OnRefreshListener() {
            @Override
            public void onLoadMore() {
                getMoreTwoFromServer();
                if (data2!=null) {
                    page2++;
                }else{
                    page2=2;
                    Toast.makeText(getContext(),"没有更多数据!",Toast.LENGTH_SHORT).show();
                }
            }
        });
        //附页下拉刷新
        twoSwipe=(SwipeRefreshLayout)view2.findViewById(R.id.swiperefresh_layout2);
        twoSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                getDataFromTwoServer();
               twoSwipe.setRefreshing(false);
            }
        });
        twoSwipe.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值