xlistview...

本文介绍了一个基于Fragment的页面加载实例,通过XListView实现上拉刷新和下拉加载更多功能,并利用ViewPager实现图片轮播效果。同时展示了如何通过AsyncTask进行后台数据请求及解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Frag1 extends Fragment implements XListView.IXListViewListener{

    private View view;
    private ArrayList<ImageView> listIVV=new ArrayList<>();//圆点集合
    int[] imgg={R.drawable.img1,R.drawable.img2,R.drawable.img3};//轮播图片数组
    private LinearLayout ll_frag1;
    private ViewPager vp_frag1;
    private XListView xlv_frag1;
    private int count=10;//一次加载10条数据
    String url="http://japi.juhe.cn/comic/book?key=3206e5516cba295eb14cb65b25a52b57";
    ArrayList<Bean> list=new ArrayList<>();
    XlvAdapter xa;
    MyDao dao;
    //handler倒计时跳转
    Handler handler=new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            int postion=vp_frag1.getCurrentItem();
            postion++;
            vp_frag1.setCurrentItem(postion);

            handler.sendEmptyMessageDelayed(0,3000);
        }
    };
    private JingTai jt;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = View.inflate(getActivity(), R.layout.frag1,null);

        init();
        initDate();
        inid();

        //注册(广播判断网络)
        jt = new JingTai();
        IntentFilter filter=new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        getActivity().registerReceiver(jt,filter);

        return view;
    }

    /**
     * 调用请求数据的方法
     */
    private void inid()
    {
        Frag1Api1 fa1=new Frag1Api1();
        fa1.execute(url);
    }

    /**
     * 初始化控件
     */
    private void init()
    {
        dao=new MyDao(getContext());

        vp_frag1 = view.findViewById(R.id.vp_frag1);//viewpager(轮播)
        xlv_frag1=view.findViewById(R.id.xlv_frag1);//xlistview(展示数据)
        ll_frag1 = view.findViewById(R.id.ll_frag1);//LinearLayout(圆点)

        xlv_frag1.setPullLoadEnable(true);//xlistview可用
        xlv_frag1.setXListViewListener(this);//类实现接口,必须给接口赋值才能使用!

        //自动轮播(无限)的适配器(图片)
        VpAdapter va=new VpAdapter(getContext());
        vp_frag1.setAdapter(va);
        vp_frag1.setCurrentItem(100000);//默认值
        vp_frag1.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {

            }

            @Override
            public void onPageSelected(int position)
            {
                //自动轮播
                for (int i = 0; i < listIVV.size(); i++)
                {
                    if(i == position%3)
                    {
                        listIVV.get(i).setImageResource(R.drawable.dot_red);
                    }
                    else
                    {
                        listIVV.get(i).setImageResource(R.drawable.dot_green);
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        //倒计时
        handler.sendEmptyMessageDelayed(0,3000);

    }
    /**
     * 添加圆点
     */
    public void initDate()
    {
        for (int i = 0; i < imgg.length; i++)
        {
            ImageView iv_frag1=new ImageView(getContext());
            if(i == 0)
            {
                iv_frag1.setImageResource(R.drawable.dot_red);
            }
            else
            {
                iv_frag1.setImageResource(R.drawable.dot_green);
            }
            LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(20,20);
            lp.setMargins(5,0,5,10);
            ll_frag1.addView(iv_frag1,lp);
            listIVV.add(iv_frag1);
        }
    }

    class Frag1Api1 extends AsyncTask<String,Integer,String>
    {
        //请求
        @Override
        protected String doInBackground(String... strings) {

            StringBuffer sb=new StringBuffer();
            try {
                URL url=new URL(strings[0]);
                HttpURLConnection huc= (HttpURLConnection) url.openConnection();
                if(200 == huc.getResponseCode())
                {
                    InputStream is=huc.getInputStream();
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String line=null;
                    while((line = br.readLine()) != null)
                    {
                        sb.append(line);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return sb.toString();

        }

        /**
         * 解析
         * @param s
         */
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            try {
                JSONObject obj=new JSONObject(s);
                JSONObject resultO=obj.getJSONObject("result");
                JSONArray bookA=resultO.getJSONArray("bookList");
                if(bookA != null && bookA.length() > 0)
                {
                    for (int i = 0; i < bookA.length(); i++)
                    {
                        JSONObject obj_b= (JSONObject) bookA.get(i);
                        Bean b=new Bean();
                        b.name=obj_b.optString("name");
                        b.area=obj_b.optString("area");
                        b.coverImg=obj_b.optString("coverImg");
                        list.add(b);
                        System.out.println(list);
                        //存数据库
                        dao.insert(b.name,b.area,b.coverImg);
                        System.out.println("====数据库=="+b.name+b.coverImg);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            if(list != null)
            {
                if(xa == null)
                {
                    //添加适配器
                    xa=new XlvAdapter(getActivity(),list);
                    xlv_frag1.setAdapter(xa);

                }
                else
                {
                    //适配器刷新
                    xa.notifyDataSetChanged();
                }
                xlv_frag1.stopRefresh();//停止刷新
                xlv_frag1.stopLoadMore();//停止加载更多
            }
        }
    }


    /**
     * 上拉刷新
     */
    @Override
    public void onRefresh()
    {
        //如果存放数据的集合不为空
        if(list != null)
        {
            //清空集合
            list.clear();
            //调用异步请求数据
            Frag1Api1 fa1=new Frag1Api1();
            fa1.execute(url);
        }
    }

    /**
     * 下拉加载
     */
    @Override
    public void onLoadMore()
    {
        //拼接的接口
        String urll=url+"&skip="+count;
        count+=10;//(自定义,初始值10)一次加载10条数据
        //调用异步请求数据
        Frag1Api1 fa1=new Frag1Api1();
        fa1.execute(urll);//新的url
    }

    /**
     * 接收   判断网络
     */
    class JingTai extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String str=intent.getAction();
            if(str.equals(ConnectivityManager.CONNECTIVITY_ACTION))
            {
                ConnectivityManager cm= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo info=cm.getActiveNetworkInfo();
                if(info != null && info.isAvailable())
                {
                    // name="WiFi网络"
                    String name=info.getTypeName();
                    if(info.getType() == ConnectivityManager.TYPE_WIFI)
                    {
                        //WIFI网络
                        Toast.makeText(context, "WiFi网络", Toast.LENGTH_SHORT).show();
                    }
                    else if(info.getType() == ConnectivityManager.TYPE_ETHERNET)
                    {
                        //有线网络
                        Toast.makeText(context, "有线网络", Toast.LENGTH_SHORT).show();
                    }
                }
                else
                {
                    Toast.makeText(context, "没网", Toast.LENGTH_SHORT).show();
                    //没网,调用数据库
                    list = dao.select();
                }
            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(jt!=null)
        {
            getActivity().unregisterReceiver(jt);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值