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;
}
}