话不多说,直接看代码
首先加权限
<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/draw"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"></android.support.v4.view.ViewPager>
<RadioGroup
android:id="@+id/radio"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/btn01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:text="关注"
android:gravity="center"
android:checked="true"
android:background="@drawable/select"/>
<RadioButton
android:id="@+id/btn02"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:text="消息"
android:background="@drawable/select"/>
<RadioButton
android:id="@+id/btn03"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:button="@null"
android:text="我的"
android:background="@drawable/select"/>
</RadioGroup>
</LinearLayout>
<fragment
class="bwie.com.yuekao.fragment.Fragmentce"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
></fragment>
</android.support.v4.widget.DrawerLayout>
之后是MainActvitiy
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.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.RadioGroup;
import bwie.com.yuekao.fragment.Fragement03;
import bwie.com.yuekao.fragment.Fragment01;
import bwie.com.yuekao.fragment.Fragment02;
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
private RadioGroup group;
private DrawerLayout draw;
private ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
draw = findViewById(R.id.draw);
viewpager = findViewById(R.id.pager);
group = findViewById(R.id.radio);
draw.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNDEFINED);
initad();
FragmentManager man = getSupportFragmentManager();
viewpager.setAdapter(new MyPageAdpter(man));
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.btn01:
viewpager.setCurrentItem(0);
break;
case R.id.btn02:
viewpager.setCurrentItem(1);
break;
case R.id.btn03:
viewpager.setCurrentItem(2);
break;
}
}
});
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
switch (i){
case 0:
group.check(R.id.btn01);
break;
case 1:
group.check(R.id.btn02);
break;
case 2:
group.check(R.id.btn03);
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
class MyPageAdpter extends FragmentPagerAdapter {
public MyPageAdpter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i){
case 0:
Fragment01 fr01 = new Fragment01();
return fr01;
case 1:
Fragment02 fr02 = new Fragment02();
return fr02;
case 2:
Fragement03 fr03 = new Fragement03();
return fr03;
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (toggle.onOptionsItemSelected(item)){
return true;
}
return super.onOptionsItemSelected(item);
}
private void initad() {
ActionBar actionBar = getSupportActionBar();
//设置一个默认的照片
actionBar.setDisplayHomeAsUpEnabled(true);
toggle = new ActionBarDrawerToggle(this, draw, R.string.open, R.string.close);
toggle.syncState();
draw.addDrawerListener(toggle);
}
}
之后是工具类
import android.os.AsyncTask;
import com.google.common.io.CharStreams;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class Httpurl {
private HttpListener httpListener;
public interface HttpListener {
void success(String date);
}
public void setHttpListener(HttpListener httpListener) {
this.httpListener = httpListener;
}
public Httpurl getHttpurl(String url){
new getRuqest(){
}.execute(url);
return this;
}
class getRuqest extends AsyncTask<String,Void,String>{
private String read=null;
@Override
protected String doInBackground(String... strings) {
try {
URL url1 = new URL(strings[0]);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream stream = connection.getInputStream();
read = CharStreams.toString(new InputStreamReader(stream));
}
return read;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
if (s!=null){
httpListener.success(s);
}
}
}
}
另一个网络请求工具类
package bwie.com.yuekao.util;
import com.google.common.io.CharStreams;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class HttpUrlConnection {
public HttpUrlConnection() {
}
public String getrequest(String url){
String ss=null;
try {
URL url1 = new URL(url);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode==200){
InputStream stream = connection.getInputStream();
String s = CharStreams.toString(new InputStreamReader(stream));
ss=s;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ss;
}
}
紧接着是一个有没有网络的判断
package bwie.com.yuekao.util;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class WLoupd {
public static boolean isNewWL(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info==null){
return false;
}else {
return true;
}
}
}
不过配置的类这里就不说明了,
然后是网络请求和数据库
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
import bwie.com.yuekao.R;
import bwie.com.yuekao.adapter.XAdapter;
import bwie.com.yuekao.bean.Lei;
import bwie.com.yuekao.bean.XinwBean;
import bwie.com.yuekao.sql.Dao;
import bwie.com.yuekao.util.HttpUrlConnection;
import bwie.com.yuekao.util.WLoupd;
import me.maxwin.view.XListView;
/**
* A simple {@link Fragment} subclass.
*/
public class Fragment01 extends Fragment {
private XListView xlist;
private int page=1;
private XAdapter xAdapter;
private final static int ONE=1;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
List<XinwBean.DataBean> list= (List<XinwBean.DataBean>) msg.obj;
if (msg.what==ONE){
xAdapter.setData(list);
}else {
xAdapter.addData(list);
}
load();
}
};
private Dao dao;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment01, container, false);
xlist = view.findViewById(R.id.xlist);
xAdapter = new XAdapter(getLayoutInflater());
dao = new Dao(getContext());
if (WLoupd.isNewWL(getContext())){
Log.e("李sss", "有网络");
initView(view);
}else {
List<XinwBean.DataBean> select = dao.select();
Log.e("李sss", select.size()+"");
xAdapter.setData(select);
xlist.setAdapter(xAdapter);
}
return view;
}
private void initView(View view) { ;
xlist.setPullLoadEnable(true);
xlist.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page++;
initData();
}
@Override
public void onLoadMore() {
page++;
initData();
}
});
xlist.setAdapter(xAdapter);
initData();
}
private String url="http://www.xieast.com/api/news/news.php?page=1http://www.xieast.com/api/news/news.php?page=";
private void initData() {
final String req=url+page;
new Thread(new Runnable() {
private List<XinwBean.DataBean> data;
@Override
public void run() {
String getrequest = new HttpUrlConnection().getrequest(req);
XinwBean xinwBean = new Gson().fromJson(getrequest, XinwBean.class);
List<XinwBean.DataBean> data = xinwBean.getData();
List<XinwBean.DataBean> select = dao.select();
for (int i = 0; i <data.size() ; i++) {
//if (xinwBean.getData().get(i).getAuthor_name().equals(select.get(i).getAuthor_name())){
// break;
// }else {
Lei lei = new Lei();
lei.setAuthor_name(xinwBean.getData().get(i).getAuthor_name());
lei.setTitle(xinwBean.getData().get(i).getTitle());
lei.setThumbnail_pic_s(xinwBean.getData().get(i).getThumbnail_pic_s());
lei.setThumbnail_pic_s02(xinwBean.getData().get(i).getThumbnail_pic_s02());
lei.setThumbnail_pic_s03(xinwBean.getData().get(i).getThumbnail_pic_s03());
dao.insert(lei);
//}
}
if (page==1){
handler.sendMessage(handler.obtainMessage(ONE,xinwBean.getData()));
}else {
handler.sendMessage(handler.obtainMessage(2,xinwBean.getData()));
}
}
}).start();
}
void load(){
page++;
xlist.stopLoadMore();
xlist.stopRefresh();
}
}
后面是数据库
先创建数据库
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class Mhelper extends SQLiteOpenHelper {
public Mhelper(Context context) {
super(context, "Pin.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table web(t_name text,t_title text,t_image text,t_image1 text,t_image2 text)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
然后是对数据库的增删该查
package bwie.com.yuekao.sql;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import bwie.com.yuekao.bean.Lei;
import bwie.com.yuekao.bean.XinwBean;
public class Dao {
SQLiteDatabase re;
public Dao(Context context){
Mhelper mhelper = new Mhelper(context);
re = mhelper.getReadableDatabase();
}
//t_name text,t_title text,t_image text,t_image1 text,t_image2 text
//添加方法
public void insert(Lei data) {
// TODO Auto-generated method stub
re.execSQL("insert into web(t_name,t_title,t_image,t_image1,t_image2) values(?,?,?,?,?)",new Object[]{data.getAuthor_name()
,data.getTitle()
,data.getThumbnail_pic_s()
,data.getThumbnail_pic_s02()
,data.getThumbnail_pic_s03()});
//Log.e("李sss", "进来了吗");
}
//查询方法
public List<XinwBean.DataBean> select() {
// TODO Auto-generated method stub
List<XinwBean.DataBean> list=new ArrayList<>();
Cursor cursor = re.rawQuery("select * from web", null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("t_name"));
String title = cursor.getString(cursor.getColumnIndex("t_title"));
String image = cursor.getString(cursor.getColumnIndex("t_image"));
String image1 = cursor.getString(cursor.getColumnIndex("t_image1"));
String image2 = cursor.getString(cursor.getColumnIndex("t_image2"));
XinwBean.DataBean dataBeans = new XinwBean.DataBean(name,title,image,image1,image2);
list.add(dataBeans);
}
return list;
}
//修改方法
/*public void update(String trim, String wzh) {
// TODO Auto-generated method stub
re.execSQL("update web set t_address=? where t_name=?",new Object[]{wzh,trim});
}*/
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
import bwie.com.yuekao.R;
import bwie.com.yuekao.bean.XinwBean;
import bwie.com.yuekao.imageloader.ImageLoaderconfigs;
public class XAdapter extends BaseAdapter {
private List<XinwBean.DataBean> list;
private LayoutInflater inflater;
public XAdapter(LayoutInflater inflater) {
this.inflater = inflater;
list=new ArrayList<XinwBean.DataBean>();
}
@Override
public int getCount() {
return list.size();
}
@Override
public XinwBean.DataBean getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if (getItemViewType(i)==ONE){
ViewHolder vh;
if (view==null){
view=inflater.inflate(R.layout.item,viewGroup,false);
vh=new ViewHolder(view);
}else {
vh= (ViewHolder) view.getTag();
}
vh.bindData(getItem(i));
}else {
ViewHolderImage vh;
if (view==null){
view=inflater.inflate(R.layout.item1,viewGroup,false);
vh=new ViewHolderImage(view);
}else {
vh= (ViewHolderImage) view.getTag();
}
vh.bindData(getItem(i));
}
return view;
}
private final static int ONE=1;
private final static int ZERO=0;
@Override
public int getItemViewType(int position) {
XinwBean.DataBean item = getItem(position);
if (item.getThumbnail_pic_s02()==null){
return ONE;
}else {
return ZERO;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
public void addData(List<XinwBean.DataBean> resultBeans) {
if (resultBeans!=null){
list.addAll(resultBeans);
}
notifyDataSetChanged();
}
public void setData(List<XinwBean.DataBean> resultBeans) {
list.clear();
if (resultBeans!=null){
list.addAll(resultBeans);
}
notifyDataSetChanged();
}
class ViewHolder{
ImageView image;
TextView name,title;
public ViewHolder(View view) {
image = view.findViewById(R.id.image);
name=view.findViewById(R.id.name);
title=view.findViewById(R.id.title);
view.setTag(this);
}
public void bindData(XinwBean.DataBean syb){
name.setText(syb.getAuthor_name());
title.setText(syb.getTitle());
ImageLoader.getInstance().displayImage(syb.getThumbnail_pic_s(),image,ImageLoaderconfigs.getDisplayImageOptions(image.getContext()));
}
}
class ViewHolderImage{
ImageView image,image1,image2;
TextView name;
public ViewHolderImage(View view) {
image = view.findViewById(R.id.i_image);
image1=view.findViewById(R.id.i_image1);
image2=view.findViewById(R.id.i_image2);
name=view.findViewById(R.id.i_name);
view.setTag(this);
}
public void bindData(XinwBean.DataBean syb){
name.setText(syb.getTitle());
ImageLoader.getInstance().displayImage(syb.getThumbnail_pic_s(),image,ImageLoaderconfigs.getDisplayImageOptions(image.getContext()));
ImageLoader.getInstance().displayImage(syb.getThumbnail_pic_s02(),image1,ImageLoaderconfigs.getDisplayImageOptions(image1.getContext()));
ImageLoader.getInstance().displayImage(syb.getThumbnail_pic_s03(),image2,ImageLoaderconfigs.getDisplayImageOptions(image2.getContext()));
}
}
}
package bwie.com.yuekao.imageloader;
import android.content.Context;
import android.graphics.Bitmap;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import bwie.com.yuekao.R;
public class ImageLoaderconfigs {
public static ImageLoaderConfiguration getImageLoaderConfiguration(Context context){
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(context)
.memoryCacheSizePercentage(13)
.diskCacheSize(50*1024*1024)
.build();
return build;
}
public static DisplayImageOptions getDisplayImageOptions(Context context){
DisplayImageOptions build = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnFail(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.imageScaleType(ImageScaleType.EXACTLY)
.bitmapConfig(Bitmap.Config.RGB_565)
.build();
return build;
}
}
不过这个数据库的添加是有点无脑,准确的来说是有一些bug会一直添加下去,在哪里加一个判断就行。