PullToRefresh+TabLayout+侧滑菜单栏+无限轮播小圆点+Fragment多条目+收藏网页数据到SQLite数据库

项目效果图:



注意:

1. 在开始项目之前自己导入PullToRefresh需要的库文件pullToRefreshLibrary;

2. 导入Gson包,ImageLoader包,关联TabLayout的design项目文件;

3. 数据接口:

http://v.juhe.cn/toutiao/index?type=top&key=c4479ad58f41e7f78a8fa073d0b1f1b5


实现代码:

一.MAinActivity.java(实现无限轮播图)

package com.month;

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.adapter.MyPagerAdapter;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ViewPager main_viewPager;
    private LinearLayout linearLayout;
    private List<ImageView> images;
    private List<String> list;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0) {
                int currentItem = main_viewPager.getCurrentItem();
                main_viewPager.setCurrentItem(currentItem + 1);

                //延时发送消息
                handler.sendEmptyMessageDelayed(0, 2888);
            }
        }
    };
    private MyPagerAdapter pagerAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        linearLayout = (LinearLayout) findViewById(R.id.lineLayout);
        main_viewPager = (ViewPager) findViewById(R.id.main_ViewPager);

        //定义集合添加数据
        list = new ArrayList<>();
        list.add("http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg");
        list.add("http://pic2.nipic.com/20090424/1468853_230119053_2.jpg");
        list.add("http://img3.3lian.com/2013/s1/20/d/57.jpg");
        list.add("http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg");
        list.add("http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg");

        // 初始化小圆点的方法
        initCircle();

        //设置适配器
        setAdapter();

        //延时发送空消息,设置图片的位置
        main_viewPager.setCurrentItem(list.size() % 10000);
        handler.sendEmptyMessageDelayed(0, 2888);
    }

    private void initCircle() {
        //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置
        images = new ArrayList<>();
        //再清除线性布局中的view视图
        linearLayout.removeAllViews();

        //遍历集合数据对应的圆点
        for(int i = 0;i<list.size();i++) {
            //先初始化一个ImageView视图
            ImageView imageView = new ImageView(MainActivity.this);

            //再设置小圆点刚开始的颜色
            if (i == 0){
                imageView.setImageResource(R.drawable.shape_selected);
            }else {
                imageView.setImageResource(R.drawable.shape_select_no);
            }

            //把设置好的视图添加到集合中
            images.add(imageView);

            //再把视图添加到线性布局中显示
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(8,0,8,0);
            linearLayout.addView(imageView,params);
        }
    }

    private void setAdapter() {
        //设置无限轮播图的适配器
        if (pagerAdapter == null) {
            pagerAdapter = new MyPagerAdapter(MainActivity.this, list);
            main_viewPager.setAdapter(pagerAdapter);

            //viewPager页面改变的监听事件
            main_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                }

                @Override
                public void onPageSelected(int position) {
                    //设置小圆点的选中颜色
                    for (int i = 0; i < images.size(); i++) {
                            if (i == position%images.size()){
                                images.get(i).setImageResource(R.drawable.shape_selected);
                            }else {
                                images.get(i).setImageResource(R.drawable.shape_select_no);
                            }
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {
                }
            });
        }else {
            pagerAdapter.notifyDataSetChanged();
        }
    }
}

二.HomeActivity.java(实现TabLayout标题栏,侧滑菜单栏)

package com.month;
import android.content.Intent;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.fragment.News_Fragment;
import java.util.ArrayList;
import java.util.List;

public class HomeActivity extends AppCompatActivity {
    private ViewPager home_viewPager;
    private DrawerLayout drawerlayout;
    private FrameLayout framelayout;
    private RelativeLayout relative;
    private List<String> data;
    private ListView listView;
    private List<String> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        //抽屉,即侧滑菜单的布局
        drawerlayout = (DrawerLayout) findViewById(R.id.drawerLayout);

        //主内容区域的布局
        framelayout = (FrameLayout) findViewById(R.id.frameLayout);

        //菜单选项布局
        listView = (ListView) findViewById(R.id.listView);

        //抽屉显示的布局
        relative = (RelativeLayout) findViewById(R.id.relative);

        //ViewPager和TabLayout布局
        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        home_viewPager = (ViewPager) findViewById(R.id.home_viewPager);

        //定义标题栏集合添加数据
        list = new ArrayList<>();
        list.add("头条");
        list.add("社会");
        list.add("国内");
        list.add("国际");
        list.add("娱乐");
        list.add("体育");
        list.add("军事");
        list.add("科技");
        list.add("财经");
        list.add("时尚");
        home_viewPager.setOffscreenPageLimit(list.size());

        //设置适配器
        home_viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            //拿到频道的标题
            @Override
            public CharSequence getPageTitle(int position) {
                return list.get(position);
            }

            @Override
            public Fragment getItem(int position) {
                //在这个位置对比一下标题是什么,,,然后返回对应的fragment
                News_Fragment news_fragment = new News_Fragment();

                //获取标题,进行传值
                Bundle bundle = new Bundle();
                bundle.putString("name",list.get(position));
                news_fragment.setArguments(bundle);
                return news_fragment;
            }

            @Override
            public int getCount() {
                return list.size();
            }
        });

        //TabLyout要与ViewPager关联显示
        tabLayout.setupWithViewPager(home_viewPager);

        //定义侧滑菜单栏集合添加数据
        data = new ArrayList<>();
        data.add("了解会员特权");
        data.add("我的收藏");
        data.add("我的钱包");
        data.add("个性装扮");
        data.add("我的相册");
        data.add("我的文件");

        //设置适配器
        ArrayAdapter<String> adapter = new ArrayAdapter<>(HomeActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
        listView.setAdapter(adapter);

        //条目的点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //点击  侧滑中  我的收藏,跳转到新页面,此页面显示  到数据库中查询 收藏的新闻,展示在ListView中,点击能显示详情(点击 侧滑中的 功能,右边主页面联动)
                if (data.get(i).equals("我的收藏")){
                    Intent intent = new Intent(HomeActivity.this, ShouCang_Activity.class);
                    startActivity(intent);
                }
            }
        });
    }
}

三.WebActivity.java(显示webview页面)

package com.month;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.bean.NewsBean;
import com.dao.UserDao;

public class WebActivity extends AppCompatActivity {
    private NewsBean.ResultBean.DataBean databean;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web);

        WebView webView = (WebView) findViewById(R.id.webView);

        //获取加载的路径
        databean = (NewsBean.ResultBean.DataBean) getIntent().getSerializableExtra("list");
        webView.loadUrl(databean.getUrl());

        //设置当前WebView页面
        webView.setWebViewClient(new WebViewClient());
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setJavaScriptEnabled(true);
    }

    /**
     * 详情页面,包含  收藏功能,点击收藏 把次新闻的主要数据保存到sqlite中,
     * 设置字段 String _id, String desc,String Url,String images
     * @param view
     */
    public void shouCang(View view){
        //调用UserDao类,添加数据到数据库
        UserDao userDao = new UserDao(WebActivity.this);
        long insert = userDao.insert(databean.getTitle(), databean.getDate(), databean.getUrl(), databean.getThumbnail_pic_s(), databean.getThumbnail_pic_s02(), databean.getThumbnail_pic_s03());
        if (insert != 0){
            Toast.makeText(WebActivity.this,"收藏成功",Toast.LENGTH_SHORT).show();
        }
    }
}

* 收藏网页数据的Activity

package com.month;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.adapter.ShouCang_Adapter;
import com.bean.NewsBean;
import com.dao.UserDao;
import java.util.List;

public class ShouCang_Activity extends AppCompatActivity {
    private List<NewsBean.ResultBean.DataBean> select;
    private ShouCang_Adapter shouCang_adapter;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shoucang);

        listView = (ListView) findViewById(R.id.listView);

        //调用UserDao类,查询数据库中的内容
        UserDao userDao = new UserDao(ShouCang_Activity.this);
        select = userDao.selectAll();
        Log.i("ShouCang集合",select.toString());

        //设置适配器显示数据
        if (shouCang_adapter == null){
            shouCang_adapter = new ShouCang_Adapter(ShouCang_Activity.this, select);
            listView.setAdapter(shouCang_adapter);
        }else {
            shouCang_adapter.notifyDataSetChanged();
        }

        //条目的点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //点击  侧滑中  我的收藏,跳转到新页面,此页面显示  到数据库中查询 收藏的新闻,展示在ListView中,点击能显示详情(点击 侧滑中的 功能,右边主页面联动)
                Intent intent = new Intent(ShouCang_Activity.this, ShowActivity.class);
                intent.putExtra("url",select.get(position).getUrl());
                startActivity(intent);
            }
        });

    }
}


*展示点击收藏的网页的Activity

package com.month;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class ShowActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show);

        WebView show_WebView = (WebView) findViewById(R.id.show_WebView);

        //获取加载的路径
        String url = getIntent().getStringExtra("url");
        show_WebView.loadUrl(url);

        //设置当前WebView页面
        show_WebView.setWebViewClient(new WebViewClient());
        WebSettings settings = show_WebView.getSettings();
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setJavaScriptEnabled(true);
    }
}

四.实现无限轮播图的适配器MyPagerAdapter :

package com.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.month.HomeActivity;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;

public class MyPagerAdapter extends PagerAdapter{
    private Context context;
    private List<String> list;

    public MyPagerAdapter(Context context, List<String> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        //设置视图
        ImageView imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView);

        //设置点击ViewPager跳转到主页面
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_UP:
                        //点击跳转,必须在按下抬起的动作之后
                        Intent intent = new Intent(context, HomeActivity.class);
                        context.startActivity(intent);
                        break;
                }
                return true;
            }
        });
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

五.显示ListView多条目的适配器MyBaseAdapter :

package com.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bean.NewsBean;
import com.month.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.util.ImageLoaderUtil;
import java.util.List;

public class MyBaseAdapter extends BaseAdapter{
    private List<NewsBean.ResultBean.DataBean> list;
    private Context context;
    private int ONLY_TITLE = 0;
    private int IMAGE_ONE = 1;
    private int IMAGE_TWO = 2;
    private int IMAGE_THREE = 3;

    public MyBaseAdapter(Context context, List<NewsBean.ResultBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return 4;
    }

    @Override
    public int getItemViewType(int position) {
        /**每个fragment中展示新闻内容,要求:多条目加载和上拉加载,下拉刷新
         多条目加载:奇数条目(第1357....)展示只有标题的布局
         偶数条目(第2468.....)展示标题+图片样式的条目布局
         */
        if (position % 2 == 0){
            if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null &&list.get(position).getThumbnail_pic_s03() != null ){
                return IMAGE_THREE;
            }else if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null){
                return IMAGE_TWO;
            }
            return IMAGE_ONE;
        }
        return ONLY_TITLE;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (getItemViewType(position) == IMAGE_ONE){
            Image01_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.item_layout01,null);
                holder =new Image01_ViewHolder();

                //查找控件
                holder.author_name = (TextView) convertView.findViewById(R.id.author_name);
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.image = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            }else {
                holder = (Image01_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            holder.author_name.setText(list.get(position).getAuthor_name());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image,ImageLoaderUtil.getDefaultOption());
        }else if (getItemViewType(position) == IMAGE_TWO){
            Image02_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.item_layout02,null);
                holder =new Image02_ViewHolder();

                //查找控件
                holder.image002 = (ImageView) convertView.findViewById(R.id.image002);
                holder.image001 = (ImageView) convertView.findViewById(R.id.image001);
                holder.title = (TextView) convertView.findViewById(R.id.title);
                convertView.setTag(holder);
            }else {
                holder = (Image02_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image001,ImageLoaderUtil.getDefaultOption());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image002,ImageLoaderUtil.getDefaultOption());
        } else {
            if (getItemViewType(position) == IMAGE_THREE) {
                Image03_ViewHolder holder;
                if (convertView == null) {
                    convertView = View.inflate(context, R.layout.item_layout03, null);
                    holder = new Image03_ViewHolder();

                    //查找控件
                    holder.image01 = (ImageView) convertView.findViewById(R.id.image01);
                    holder.image02 = (ImageView) convertView.findViewById(R.id.image02);
                    holder.image03 = (ImageView) convertView.findViewById(R.id.image03);
                    holder.title = (TextView) convertView.findViewById(R.id.title);
                    convertView.setTag(holder);
                } else {
                    holder = (Image03_ViewHolder) convertView.getTag();
                }

                //获取数据重新赋值
                holder.title.setText(list.get(position).getTitle());
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder.image01, ImageLoaderUtil.getDefaultOption());
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(), holder.image02, ImageLoaderUtil.getDefaultOption());
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(), holder.image03, ImageLoaderUtil.getDefaultOption());
            } else {
                Only_Title_ViewHolder holder;
                if (convertView == null) {
                    convertView = View.inflate(context, R.layout.only_title, null);
                    holder = new Only_Title_ViewHolder();

                    //查找控件
                    holder.title = (TextView) convertView.findViewById(R.id.title);
                    holder.author_name = (TextView) convertView.findViewById(R.id.author_name);
                    convertView.setTag(holder);
                } else {
                    holder = (Only_Title_ViewHolder) convertView.getTag();
                }

                //获取数据重新赋值
                holder.title.setText(list.get(position).getTitle());
                holder.author_name.setText(list.get(position).getAuthor_name());
            }
        }
        return convertView;
    }

    //自定义优化缓存类
    static  class  Only_Title_ViewHolder{
        TextView title,author_name;
    }
    static  class  Image01_ViewHolder{
        TextView title,author_name;
        ImageView image;
    }
    static  class  Image02_ViewHolder{
        TextView title;
        ImageView image001,image002;
    }
    static  class  Image03_ViewHolder{
        TextView title;
        ImageView image01,image02,image03;
    }
}


*显示收藏的网页布局适配器:

package com.adapter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.bean.NewsBean;
import com.month.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.util.ImageLoaderUtil;
import java.util.List;

public class ShouCang_Adapter extends BaseAdapter{
    private List<NewsBean.ResultBean.DataBean> list;
    private Context context;
    private int ONLY_TITLE = 0;
    private int IMAGE_ONE = 1;
    private int IMAGE_TWO = 2;
    private int IMAGE_THREE = 3;

    public ShouCang_Adapter(Context context, List<NewsBean.ResultBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getViewTypeCount() {
        return 4;
    }

    @Override
    public int getItemViewType(int position) {
        /**每个fragment中展示新闻内容,要求:多条目加载和上拉加载,下拉刷新
         多条目加载:奇数条目(第1357....)展示只有标题的布局
         偶数条目(第2468.....)展示标题+图片样式的条目布局
         */
        if (position % 2 == 0){
            if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null &&list.get(position).getThumbnail_pic_s03() != null ){
                return IMAGE_THREE;
            }else if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null){
                return IMAGE_TWO;
            }
            return IMAGE_ONE;
        }
        return ONLY_TITLE;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (getItemViewType(position) == IMAGE_ONE){
            Image01_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.shoucang_one_item,null);
                holder =new Image01_ViewHolder();

                //查找控件
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.date = (TextView) convertView.findViewById(R.id.date);
                holder.image = (ImageView) convertView.findViewById(R.id.image);
                convertView.setTag(holder);
            }else {
                holder = (Image01_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            holder.date.setText(list.get(position).getDate());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image, ImageLoaderUtil.getDefaultOption());
        }else if (getItemViewType(position) == IMAGE_TWO){
            Image02_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.shoucang_two_item,null);
                holder =new Image02_ViewHolder();

                //查找控件
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.date = (TextView) convertView.findViewById(R.id.date);
                holder.image02 = (ImageView) convertView.findViewById(R.id.image02);
                holder.image01 = (ImageView) convertView.findViewById(R.id.image01);
                convertView.setTag(holder);
            }else {
                holder = (Image02_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            holder.date.setText(list.get(position).getDate());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image02,ImageLoaderUtil.getDefaultOption());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image01,ImageLoaderUtil.getDefaultOption());
        } else if (getItemViewType(position) == IMAGE_THREE){
            Image03_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.shoucang_three_item,null);
                holder =new Image03_ViewHolder();

                //查找控件
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.date = (TextView) convertView.findViewById(R.id.date);
                holder.image001 = (ImageView) convertView.findViewById(R.id.image001);
                holder.image002 = (ImageView) convertView.findViewById(R.id.image002);
                holder.image003 = (ImageView) convertView.findViewById(R.id.image003);
                convertView.setTag(holder);
            }else {
                holder = (Image03_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            holder.date.setText(list.get(position).getDate());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image001,ImageLoaderUtil.getDefaultOption());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image002,ImageLoaderUtil.getDefaultOption());
            ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(),holder.image003,ImageLoaderUtil.getDefaultOption());
        }else {
            Only_Title_ViewHolder holder;
            if (convertView == null){
                convertView =View.inflate(context, R.layout.title_layout,null);
                holder =new Only_Title_ViewHolder();

                //查找控件
                holder.title = (TextView) convertView.findViewById(R.id.title);
                holder.date = (TextView) convertView.findViewById(R.id.date);
                convertView.setTag(holder);
            }else {
                holder = (Only_Title_ViewHolder) convertView.getTag();
            }

            //获取数据重新赋值
            holder.title.setText(list.get(position).getTitle());
            holder.date.setText(list.get(position).getDate());
        }
        return convertView;
    }

    //自定义优化缓存类
    static  class  Only_Title_ViewHolder{
        TextView title,date;
    }
    static  class  Image01_ViewHolder{
        TextView title,date;
        ImageView image;
    }
    static  class  Image02_ViewHolder{
        TextView title,date;
        ImageView image01,image02;
    }
    static  class  Image03_ViewHolder{
        TextView title,date;
        ImageView image001,image002,image003;
    }
}

六. 自定义bean类


七. 实现数据的 News_Fargment类:

package com.fragment;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import com.adapter.MyBaseAdapter;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.bean.NewsBean;
import com.month.WebActivity;
import com.util.NetConnectionUtil;
import com.util.StringUtil;
import com.month.R;

public class News_Fragment extends Fragment{
    //记录当前页面所有的数据....上拉或下拉添加到集合
    private List<NewsBean.ResultBean.DataBean> list = new ArrayList<>();
    private PullToRefreshListView refreshListView;
    private int page_num = 1;   //下拉刷新的页数
    private ILoadingLayout startLabels;
    private ILoadingLayout endLabels;
    private MyBaseAdapter adapter;
    private String encode;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.news_layout, container, false);
        refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);

        //点击新闻,跳转到详情页面,通过webview加载
        refreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(getActivity(), WebActivity.class);

                //传当前条目的对象值
                intent.putExtra("list",list.get(position-1));
                startActivity(intent);
            }
        });
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //获取传递的标题数据,把获取的标题转码实现
        Bundle bundle = getArguments();
        String data = bundle.getString("name", "top");
        encode = URLEncoder.encode(data);

        //通过HttpUrlConnection进行相关栏目json串请求,请求前先判断网络是否可用
        if (NetConnectionUtil.isNetConnectioned(getActivity())){
            getDataFromNet();
        }else {
            NetConnectionUtil.setNetConnectionWork(getActivity());
        }

        //1.设置刷新的模式(PullToRefreshBase.Mode.BOTH:上下都可以刷新加载)
        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);

        //2.设置刷新显示的文字
        startLabels = refreshListView.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉刷新");
        startLabels.setRefreshingLabel("正在刷新...");
        startLabels.setReleaseLabel("放开刷新");

        endLabels = refreshListView.getLoadingLayoutProxy(false, true);
        endLabels.setPullLabel("上拉刷新");
        endLabels.setRefreshingLabel("正在载入...");
        endLabels.setReleaseLabel("放开刷新...");

        //3.设置监听事件
        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            //下拉刷新
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                //当下拉刷新的时候,将第几页设成1,重新获取数据,请求前先判断网络是否可用
                if (NetConnectionUtil.isNetConnectioned(getActivity())){
                    getRefreshData();
                }else {
                    NetConnectionUtil.setNetConnectionWork(getActivity());
                }
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                page_num++;
                //当上拉加载更多的时候,将第几页的数字加1,重新获取;请求前先判断网络是否可用
                if (NetConnectionUtil.isNetConnectioned(getActivity())){
                    getDataFromNet();
                }else {
                    NetConnectionUtil.setNetConnectionWork(getActivity());
                }
            }
        });
    }

    /**
     * 下拉刷新获取数据
     * 1.page_num 改变
     * 2.每次添加到集合的前边
     */
    private void getRefreshData() {
        //1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
        AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                try {
                    String path = "http://v.juhe.cn/toutiao/index?type="+encode+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5";

                    //连接网络
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    //响应数据
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StringUtil.streamToString(inputStream,"utf-8");
                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "";
            }

            @Override
            protected void onPostExecute(String result) {
                //解析数据
                NewsBean newsBean = new Gson().fromJson(result, NewsBean.class);

                //把解析的数据添加到集合前面,设置适配器
                list.addAll(0,newsBean.getResult().getData());
                setAdapter();

                //停止刷新
                refreshListView.onRefreshComplete();

                //设置本次刷新的时间
                Date date = new Date(System.currentTimeMillis());
                SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
                startLabels.setLastUpdatedLabel("上次刷新的时间为:"+dateFormat.format(date));
            }
        };
        task.execute();
    }

    //异步加载网络数据的方法
    public void getDataFromNet() {
        //1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
        AsyncTask<Void,Void,String>  task = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                try {
                    String path = "http://v.juhe.cn/toutiao/index?type="+encode+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5";
                    //连接网络
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);

                    //响应数据
                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200){
                        InputStream inputStream = connection.getInputStream();
                        String json = StringUtil.streamToString(inputStream,"utf-8");

                        return json;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "";
            }

            @Override
            protected void onPostExecute(String result) {
                //解析数据
                NewsBean newsBean = new Gson().fromJson(result, NewsBean.class);

                //把解析的数据添加到集合中,设置适配器
                list.addAll(newsBean.getResult().getData());
                setAdapter();

                //停止刷新
                refreshListView.onRefreshComplete();
            }
        };
        task.execute();
    }

    //设置适配器的方法
    public void setAdapter(){
        if (adapter == null){
            adapter = new MyBaseAdapter(getActivity(), list);
            refreshListView.setAdapter(adapter);
        }else {
            adapter.notifyDataSetChanged();
        }
    }

}


八. 创建的数据库类:

package com.sqlite;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyHelper extends SQLiteOpenHelper{
    public MyHelper(Context context) {
        super(context, "bawei.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表结构
        db.execSQL("create table user (id integer primary key autoincrement, title text,date text,url text,pic_s text,pic_s02 text,pic_s03 text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
}

九. 操作数据库的dao类方法:

package com.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.bean.NewsBean;
import com.sqlite.MyHelper;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    private MyHelper helper;

    //传递上下文对象的有参构造方法
    public UserDao(Context context) {
        helper = new MyHelper(context);
    }

    //添加方法
    public long insert(String title, String date, String url, String thumbnail_pic_s, String thumbnail_pic_s02, String thumbnail_pic_s03) {

        SQLiteDatabase database = helper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("title",title);
        values.put("date",date);
        values.put("url",url);
        values.put("pic_s",thumbnail_pic_s);
        values.put("pic_s02",thumbnail_pic_s02);
        values.put("pic_s03",thumbnail_pic_s03);
        long update = database.insert("user", null, values);

        database.close();
        return update;
    }


    //查询已经收藏的新闻数据
    public List<NewsBean.ResultBean.DataBean> selectAll() {
        List<NewsBean.ResultBean.DataBean> list =new ArrayList<>();

        SQLiteDatabase database = helper.getWritableDatabase();
        Cursor cursor = database.query("user", null, null, null, null, null, null);
        while (cursor.moveToNext()){
            //拿到查出来的数据

            String title = cursor.getString(cursor.getColumnIndex("title"));
            String date = cursor.getString(cursor.getColumnIndex("date"));
            String url = cursor.getString(cursor.getColumnIndex("url"));
            String pic_s = cursor.getString(cursor.getColumnIndex("pic_s"));
            String pic_s02 = cursor.getString(cursor.getColumnIndex("pic_s02"));
            String pic_s03 = cursor.getString(cursor.getColumnIndex("pic_s03"));

            //new出来对象
            NewsBean.ResultBean.DataBean dataBean = new NewsBean.ResultBean.DataBean(title, date, url, pic_s, pic_s02, pic_s03);
            list.add(dataBean);
        }

        cursor.close();
        database.close();
        Log.i("Dao集合",list.toString());
        return list;
    }
}


十. util工具包中:

1. 全局化配置ImageLoader类的 BaseApplication.java

package com.util;

import android.app.Application;
//全局初始化Application类
public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        //配置imageLoader
        ImageLoaderUtil.init(this);
    }
}

2. 配置imageLoader的 ImageLoaderUtil.java

package com.util;

import android.content.Context;
import android.graphics.Bitmap;
import com.month.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
public class ImageLoaderUtil {
    /**
     * 初始化imageLoader
     * @param context
     */
    public static void init(Context context) {
        //1.获取配置config对象
        File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)

                .threadPoolSize(3) // default  线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default
                .diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量
                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(new BaseImageDownloader(context)) // default
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建


        //2.初始化配置...ImageLoader.getInstance()图片加载器的对象,单例模式
        ImageLoader.getInstance().init(config);
    }

    /**
     * imageLoader加载图片的默认选项
     * @return
     */
    public static DisplayImageOptions getDefaultOption(){

        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.app) // 设置图片下载期间显示的默认图片
                .showImageForEmptyUri(R.drawable.app) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.app) // 设置图片加载或解码过程中发生错误显示的图片
                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
                .delayBeforeLoading(1000)  // 下载前的延迟时间
                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();

        return options;
    }

    /**
     * imageLoader加载圆角图片....指定圆角的大小
     * @return
     */
    public static DisplayImageOptions getRoundedOption(int corner){

        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.app) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.drawable.app) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.app) // 设置图片加载或解码过程中发生错误显示的图片
                .resetViewBeforeLoading(true)  // default 设置图片在加载前是否重置、复位
                .delayBeforeLoading(1000)  // 下载前的延迟时间
                .cacheInMemory(true) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(true) // default  设置下载的图片是否缓存在SD卡中

                .considerExifParams(true) // default
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型

                .displayer(new RoundedBitmapDisplayer(corner)) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)

                .build();

        return options;
    }

}

3. 判断网络连接的工具类  NetConnectionUtil.java

package com.util;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
/**
 * 判断网络连接的工具类
 */
public class NetConnectionUtil {
    /**
     * 判断是否有网络连接的方法
     */
    public  static boolean isNetConnectioned(Context context){
        //1. 获取网络连接对象
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        //2. 获取NetworkInfo对象,获取网络连接的信息
        NetworkInfo info = manager.getActiveNetworkInfo();

        //3. 信息不为空时,就代表网络可用
        if (info != null){
            return info.isAvailable();
        }
        return false;
    }

    /**
     * 网络无连接时跳转页面,弹出对话框进行网络的设置
     */
    public static void setNetConnectionWork(final Context context){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("网络加载错误!");
        builder.setMessage("网络连接不可用,是否设置网络?");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                //跳转到系统的设置网络的界面
                Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
                context.startActivity(intent);
            }
        });
        builder.setNegativeButton("取消",null);
        builder.show();
    }
}

4. 解析json数据的  StringUtil.java

package com.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class StringUtil {

    public static String streamToString(InputStream inputStream, String charset) {
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String s = null;
            StringBuilder builder = new StringBuilder();
            while ((s = bufferedReader.readLine()) != null){
                builder.append(s);
            }

            bufferedReader.close();
            return builder.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return  null;
    }
}

九. 自定义布局文件:

1. drawable文件夹下设置小圆点的布局文件

(1)shape_selected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#00b7ff"></solid>
    <corners android:radius="8dp"></corners>
    <size android:width="8dp"  android:height="8dp"></size>
</shape>

(2)shape_select_no.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="#dfdfdf"></solid>
    <corners android:radius="8dp"></corners>
    <size android:width="8dp"  android:height="8dp"></size>
</shape>

2. layout文件夹下的布局文件:

(1)activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/main_ViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/lineLayout"
        android:orientation="horizontal"
        android:gravity="center_horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="28dp"
        android:layout_alignBottom="@+id/main_ViewPager"    ></LinearLayout>
</RelativeLayout>

(2)activity_home.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"  >

    <!--主内容区域的视图-->
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:orientation="vertical">

            <android.support.design.widget.TabLayout
                app:tabTextAppearance="@style/TextStyle"
                android:layout_width="match_parent"
                app:tabSelectedTextColor="#FF0000"
                android:background="#00BFFF"
                app:tabIndicatorHeight="0dp"
                android:layout_height="60dp"
                android:id="@+id/tabLayout"
                app:tabTextColor="#000000"
                app:tabMode="scrollable"></android.support.design.widget.TabLayout>

            <android.support.v4.view.ViewPager
                android:id="@+id/home_viewPager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></android.support.v4.view.ViewPager>

        </LinearLayout>
    </FrameLayout>

    <!--抽屉展示的布局-->
    <RelativeLayout
        android:id="@+id/relative"
        android:layout_gravity="left"
        android:layout_width="250dp"
        android:background="#00BFFF"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/a"
            android:src="@drawable/a"
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:layout_marginLeft="65dp"
            android:layout_marginTop="20dp" />

        <TextView
            android:text="问天"
            android:textSize="21sp"
            android:id="@+id/text"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="21dp"
            android:layout_toRightOf="@id/a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <ListView
            android:divider="#00BFFF"
            android:id="@+id/listView"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="80dp"
            android:layout_below="@+id/text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"></ListView>
    </RelativeLayout>
</android.support.v4.widget.DrawerLayout>

(3)activity_web.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>

    <Button
        android:text="收藏此新闻"
        android:onClick="shouCang"
        android:layout_width="128dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"/>
</RelativeLayout>

(4)news_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        xmlns:ptr="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/refresh_list_view"
        ptr:ptrDrawable="@drawable/default_ptr_flip"
        ptr:ptrAnimationStyle="flip"
        ptr:ptrHeaderBackground="#383838"
        ptr:ptrHeaderTextColor="#FFFFFF"  >

    </com.handmark.pulltorefresh.library.PullToRefreshListView>

</LinearLayout>

(5)显示收藏页的xml:activity_shoucang.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>
</LinearLayout>

(6)显示收藏的网页布局:activity_show.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/show_WebView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></WebView>
</RelativeLayout>

(7)显示多条目的4种布局:

item_layout01.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_weight="2"
        android:layout_width="0dp"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true">

            <TextView
                android:textSize="18sp"
                android:id="@+id/title"
                android:textStyle="bold"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="18dp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <TextView
                android:textSize="13sp"
                android:id="@+id/author_name"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="15dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
    </LinearLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_marginRight="5dp"
        android:layout_gravity="center_vertical" />
</LinearLayout>

item_layout02.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:textSize="18sp"
        android:id="@+id/title"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_marginTop="18dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image001"
            android:layout_height="120dp"   />

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image002"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

    </LinearLayout>

</LinearLayout>

item_layout03.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:textSize="18sp"
        android:id="@+id/title"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_marginTop="18dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:layout_weight="1"
            android:id="@+id/image01"
            android:layout_width="0dp"
            android:layout_height="120dp"   />

        <ImageView
            android:layout_weight="1"
            android:id="@+id/image02"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

        <ImageView
            android:layout_weight="1"
            android:id="@+id/image03"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

    </LinearLayout>

</LinearLayout>

only_title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:textSize="18sp"
        android:layout_marginTop="10dp"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"    />

    <TextView
        android:textSize="12sp"
        android:id="@+id/author_name"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"    />
</LinearLayout>

(8)显示收藏的多条目网页布局4种:

shoucang_one_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_weight="2"
        android:layout_width="0dp"
        android:orientation="vertical"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true">

        <TextView
            android:textSize="18sp"
            android:id="@+id/title"
            android:textStyle="bold"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="18dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:textSize="13sp"
            android:id="@+id/date"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="15dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_marginRight="5dp"
        android:layout_gravity="center_vertical" />
</LinearLayout>

shoucang_two_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="10dp">

    <TextView
        android:textSize="18sp"
        android:id="@+id/title"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_marginTop="18dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image01"
            android:layout_height="120dp"   />

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image02"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>
    </LinearLayout>

    <TextView
        android:textSize="12sp"
        android:id="@+id/date"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="18dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

shoucang_three_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="10dp">

    <TextView
        android:textSize="18sp"
        android:id="@+id/title"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_marginTop="18dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image001"
            android:layout_height="120dp"   />

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image002"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>

        <ImageView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:id="@+id/image003"
            android:layout_height="120dp"
            android:layout_marginLeft="3dp"/>
    </LinearLayout>

    <TextView
        android:textSize="12sp"
        android:id="@+id/date"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="18dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

title_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:textSize="18sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"    />

    <TextView
        android:id="@+id/date"
        android:textSize="12sp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"    />
</LinearLayout>

3. values文件夹下的 styles.xml加入下面代码

<style name="TextStyle">
    <item name="android:textSize">21sp</item>
</style>


十. AndroidManifest.xml中

 1. 加入请求网络数据 ,判断网络状态的权限;

 2.声明imageloader的name属性。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值