DrawerLayout+viewpager+Fragment+TabLayout+PullToRefreshListView+数据库+网络判断

package com.example.day_lixie;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
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.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.QuickContactBadge;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.example.day_lixie.fragments.Fragment1;
import com.example.day_lixie.fragments.Fragment2;
import com.example.day_lixie.fragments.Fragment3;

import org.w3c.dom.Text;

import java.util.ArrayList;
import java.util.List;
//Activity
public class MainActivity extends FragmentActivity {
private RadioGroup group;
private ViewPager viewPager;
private List list=new ArrayList<>();
private DrawerLayout drawerLayout;
private ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout=findViewById(R.id.drawerlayout);
image=findViewById(R.id.image);
//监听
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(@NonNull View view, float v) {

        }

        @Override
        public void onDrawerOpened(@NonNull View view) {
            //当菜单完全打开时
            Log.d("ccc","opened--------");
            Toast.makeText(MainActivity.this,"我被打开了",Toast.LENGTH_LONG).show();

        }

        @Override
        public void onDrawerClosed(@NonNull View view) {
            //当菜单关闭时回调
            Toast.makeText(MainActivity.this,"我被关闭了",Toast.LENGTH_LONG).show();

        }

        @Override
        public void onDrawerStateChanged(int i) {

        }
    });
    //监听
    image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //关闭菜单
            drawerLayout.closeDrawer(Gravity.START);
        }
    });

    group=findViewById(R.id.group);
    viewPager=findViewById(R.id.viewpager);
    list.add(new Fragment1());
    list.add(new Fragment2());
    list.add(new Fragment3());
    viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int i) {
            return list.get(i);
        }

        @Override
        public int getCount() {
            return list.size();
        }
    });
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId){
                case R.id.but1:
                    viewPager.setCurrentItem(0);
                    break;
                case R.id.but2:
                    viewPager.setCurrentItem(1);
                    break;
                case R.id.but3:
                    viewPager.setCurrentItem(2);
                    break;
            }
        }
    });
}

}
//网络工具类
package com.example.day_lixie.utils;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetWork {
public static boolean isConnection(Context context) {
// 连接管理类,
ConnectivityManager connMgr =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();

    if (activeInfo != null && activeInfo.isConnected()) {
        return  true;
    } else {
        return false;
    }

}

}
//数据库
package com.example.day_lixie.dp;

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

public class MyHlper extends SQLiteOpenHelper
{
public MyHlper(Context context) {
super(context, “uesr.db”, null, 1);
}

    @Override
public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table stu(id integer primary key autoincrement,url text,jsonData text)");

}

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

}

}
//dao
package com.example.day_lixie.dp;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class Dao {

private SQLiteDatabase database;

public Dao(Context context) {
    MyHlper myHlper = new MyHlper(context);
    database = myHlper.getWritableDatabase();

}

//插入的方法
public void add(String url, String data) {
    //先删除相同url地址的数据
    database.delete("stu","url=?",new String[]{url});
    ContentValues values = new ContentValues();
    values.put("url", url);//k值一定是数据库的字段值
    values.put("jsonData", data);
    //返回行号
    long rowid = database.insert("stu", null, values);
}
//查询

public String queryData(String url){
String data="";
Cursor cursor = database.query(“stu”, null, “url=?”, new String[]{url}, null, null, null);
while (cursor.moveToNext()){
//获得jsonData字段的内容
data= cursor.getString(cursor.getColumnIndex(“jsonData”));
}
return data;
}

}
//javabean
package com.example.day_lixie.bean;

import java.util.List;

public class MyBean {
private int status;
private String info;
private List data;

public int getStatus() {
    return status;
}

public void setStatus(int status) {
    this.status = status;
}

public String getInfo() {
    return info;
}

public void setInfo(String info) {
    this.info = info;
}

public List<DataBean> getData() {
    return data;
}

public void setData(List<DataBean> data) {
    this.data = data;
}

public static class DataBean {
    /**
     * news_id : 13811
     * news_title : 深港澳台千里连线,嘉年华会今夏入川
     * news_summary : 6月17—20日,“2016成都深港澳台嘉年华会”(简称嘉年华会)将在成都世纪城国际会展中心举办。其主办方励展华博借力旗
     * pic_url : http://f.expoon.com/sub/news/2016/01/21/887844_230x162_0.jpg
     */

    private String news_id;
    private String news_title;
    private String news_summary;
    private String pic_url;

    public String getNews_id() {
        return news_id;
    }

    public void setNews_id(String news_id) {
        this.news_id = news_id;
    }

    public String getNews_title() {
        return news_title;
    }

    public void setNews_title(String news_title) {
        this.news_title = news_title;
    }

    public String getNews_summary() {
        return news_summary;
    }

    public void setNews_summary(String news_summary) {
        this.news_summary = news_summary;
    }

    public String getPic_url() {
        return pic_url;
    }

    public void setPic_url(String pic_url) {
        this.pic_url = pic_url;
    }
}

}
//app图片框架
package com.example.day_lixie.app;

import android.app.Application;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

//图片框架
public class MApp extends Application {
@Override
public void onCreate() {
super.onCreate();

    ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
    ImageLoader.getInstance().init(configuration);


}

}
//适配
package com.example.day_lixie.adpter;

import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.day_lixie.R;
import com.example.day_lixie.bean.MyBean;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

public class MyAdapter extends BaseAdapter {
private ImageLoader imageLoaderInstances = ImageLoader.getInstance();;
private List<MyBean.DataBean> list;
private Context context;

public MyAdapter(List<MyBean.DataBean> list, Context context) {
    this.list = list;
    this.context = context;
}



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

@Override
public Object getItem(int position) {
    return null;
}

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

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

@Override
public int getItemViewType(int position) {
    return position%2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int itemViewType = getItemViewType(position);
    switch (itemViewType){
        case 0:
            ViewHolder0 holder0=new ViewHolder0();
            if(convertView==null){
                convertView=View.inflate(context, R.layout.item1,null);
                holder0.text1=convertView.findViewById(R.id.text1);

                convertView.setTag(holder0);
            }else {
                holder0= (ViewHolder0) convertView.getTag();
            }
            holder0.text1.setText(list.get(position).getNews_title());

            break;
        case 1:
            ViewHolder holder=new ViewHolder();
            if(convertView==null){
                convertView=View.inflate(context, R.layout.item,null);
                holder.text=convertView.findViewById(R.id.text);
                holder.imag=convertView.findViewById(R.id.imag);
                convertView.setTag(holder);
            }else {
                holder= (ViewHolder) convertView.getTag();
            }
            holder.text.setText(list.get(position).getNews_title());
            imageLoaderInstances.displayImage(list.get(position).getPic_url(), holder.imag);
            break;
    }
    return convertView;
}
class ViewHolder{
    ImageView imag;
    TextView text;
}
class ViewHolder0{

    TextView text1;
}

}
//fragments
package com.example.day_lixie.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.day_lixie.R;
import com.example.day_lixie.adpter.MyAdapter;

import java.util.ArrayList;

public class Fragment1 extends Fragment {

private MyAdapter adapter;
private TabLayout tabLayout;
private ViewPager viewPager;
ArrayList<Fragment> list1 = new ArrayList<Fragment>();
ArrayList<String> titlelist  = new ArrayList<String>();


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment1,container,false);

    tabLayout = view.findViewById(R.id.tablayout);
    viewPager = view.findViewById(R.id.viewPager);
    initData();
    //配置适配器
    MPagerrAdapter mPagerrAdapter = new MPagerrAdapter(getChildFragmentManager());
    viewPager.setAdapter(mPagerrAdapter);
    //关联联动
    tabLayout.setupWithViewPager(viewPager);
    return view;
}

private void initData() {
    for (int i=0;i<3;i++){
        list1.add(new Fragment1_0());
        list1.add(new Fragment1_1());
        list1.add(new Fragment1_2());
        titlelist.add("标题"+i);
    }
}

//适配器继承FragmentPagerAdapter 重写方法

private  class MPagerrAdapter extends FragmentPagerAdapter {

    public MPagerrAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        return list1.get(i);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titlelist.get(position);
    }
}

}
//PullToRefreshListView
package com.example.day_lixie.fragments;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
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.ListView;
import android.widget.Toast;

import com.example.day_lixie.R;
import com.example.day_lixie.adpter.MyAdapter;
import com.example.day_lixie.bean.MyBean;
import com.example.day_lixie.dp.Dao;
import com.example.day_lixie.utils.NetWork;
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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Fragment1_0 extends Fragment {
private String url = “http://api.expoon.com/AppNews/getNewsList/type/1/p/1”;
private PullToRefreshListView pv;
private int page;
List<MyBean.DataBean> list=new ArrayList<>();
private MyAdapter adapter;
private Dao dao;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment1_0,container,false);
pv=view.findViewById(R.id.pv);
dao=new Dao(getActivity());
return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    //初始化
    initpv();
    //请求网络
    requstNetDtata(page);
}

private void requstNetDtata(int page) {
    //调用网络判断
    boolean connection = NetWork.isConnection(getActivity());
    if(connection){//有网
        String urls=url+page;
        new MyTask().execute(urls);
    }else {
        //没有网
        Toast.makeText(getActivity(),"请检查网络再试",Toast.LENGTH_LONG).show();
        //根据url地址。从数据库中获取数据
        String jsonData = dao.queryData(url);//调取数据库查询的方法
        if (!"".equals(jsonData)){
            //解析gson
            Gson gson=new Gson();
            MyBean myBean = gson.fromJson(jsonData, MyBean.class);
            List<MyBean.DataBean> data = myBean.getData();
            list.addAll(data);
            setLvAdapter();
            //关闭上下拉刷新
            pv.onRefreshComplete();
        }
    }
}
//异步请求网络
class MyTask extends AsyncTask<String ,Void,String> {

    @Override
    protected String doInBackground(String... strings) {
        String str="";
        try {
            URL url=new URL(strings[0]);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.setReadTimeout(1000);
            urlConnection.setConnectTimeout(1000);
            urlConnection.setRequestMethod("GET");
            if(urlConnection.getResponseCode()==200){
                InputStream inputStream = urlConnection.getInputStream();
                str = stramTostring(inputStream);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return str;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //将请求下来的json数据缓存在数据库中
        dao.add(url,s);
        Gson gson=new Gson();
        MyBean myBean = gson.fromJson(s, MyBean.class);
        List<MyBean.DataBean> data = myBean.getData();
        list.addAll(data);
        setLvAdapter();
        //关闭上下拉刷新
        pv.onRefreshComplete();
    }
}
/*
初始化
* */
private void initpv() {
    //1设置模式 支持上拉加载 下拉刷新
    pv.setMode(PullToRefreshBase.Mode.BOTH);
    //2     设置头尾布局的文字
    ILoadingLayout startLabels = pv.getLoadingLayoutProxy(true, false);
    startLabels.setPullLabel("下拉刷新");
    startLabels.setRefreshingLabel("正在拉");
    startLabels.setReleaseLabel("放开刷新");
    ILoadingLayout endLabels = pv.getLoadingLayoutProxy(false, true);
    endLabels.setPullLabel("上拉刷新");
    endLabels.setRefreshingLabel("正在载入...");
    endLabels.setReleaseLabel("放开刷新...");


    //3设置监听事件
    pv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
        @Override
        public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
            list.clear();
            requstNetDtata(page);
        }
        @Override
        public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
            page++;
            requstNetDtata(page);
        }
    });

}
//适配器方法
public void setLvAdapter(){
    //if(adapter==null){
    adapter=new MyAdapter(list,getActivity());
    pv.setAdapter(adapter);

    //  }else {
    adapter.notifyDataSetChanged();
    // }
}
/*
* 将字符转成字符串
* */
public String stramTostring(InputStream stream) {
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
    String timp;
    try {
        while ((timp=reader.readLine())!=null){
            stringBuilder.append(timp);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return stringBuilder.toString();
}

}
package com.example.day_lixie.fragments;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
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.ListView;
import android.widget.Toast;

import com.example.day_lixie.R;
import com.example.day_lixie.adpter.MyAdapter;
import com.example.day_lixie.bean.MyBean;
import com.example.day_lixie.dp.Dao;
import com.example.day_lixie.utils.NetWork;
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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Fragment1_1 extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment1_1,container,false);

    return view;
}

}
package com.example.day_lixie.fragments;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
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.ListView;
import android.widget.Toast;

import com.example.day_lixie.R;
import com.example.day_lixie.adpter.MyAdapter;
import com.example.day_lixie.bean.MyBean;
import com.example.day_lixie.dp.Dao;
import com.example.day_lixie.utils.NetWork;
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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class Fragment1_2 extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment1_2,container,false);

    return view;
}

}
package com.example.day_lixie.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.day_lixie.R;

public class Fragment2 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment2,container,false);
return view;
}
}
package com.example.day_lixie.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.day_lixie.R;

public class Fragment3 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment3,container,false);
return view;
}
}

猜你喜欢

转载自blog.csdn.net/weixin_44297368/article/details/86227801