记得导入pulltorefresh插件
1BaseFragment基类
package com.bei.shuaibei;
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;
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(bindLayout(), container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
initData();
bindEvent();
}
protected abstract void bindEvent();
protected abstract void initData();
protected abstract void initView();
protected abstract int bindLayout();
}
2BaseActivity基类
package com.bei.shuaibei;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
public abstract class BaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(bindLayout());
initView();
initData();
bindEvent();
}
protected abstract void bindEvent();
protected abstract void initData();
protected abstract void initView();
protected abstract int bindLayout();
}
3main布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio0"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:drawableTop="@drawable/sel"
android:button="@null"
android:padding="5dp"
android:gravity="center"
android:text="首页"/>
<RadioButton
android:id="@+id/radio1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:drawableTop="@drawable/sel"
android:button="@null"
android:padding="5dp"
android:gravity="center"
android:text="视频"/>
<RadioButton
android:id="@+id/radio2"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:drawableTop="@drawable/sel"
android:button="@null"
android:padding="5dp"
android:gravity="center"
android:text="头条"/>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:layout_gravity="left"
android:background="#fff"
android:orientation="vertical"
android:layout_width="320dp"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
4mainactivity
package com.bei.shuaibei;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Toast;
import com.bei.shuaibei.adapter.CeAdapter;
import com.bei.shuaibei.bean.JsonBean;
import com.bei.shuaibei.frag.FragList;
import com.bei.shuaibei.frag.FragNull;
import com.bei.shuaibei.frag.FragNull1;
import com.bei.shuaibei.http.Http;
import com.google.gson.Gson;
import java.util.ArrayList;
public class MainActivity extends BaseActivity {
private ArrayList<JsonBean.DataBean> list;
private RadioGroup radioGroup;
private FragList fragList;
private FragNull fragNull;
private FragNull1 fragNull1;
private ListView listView;
private String str="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
@Override
protected int bindLayout() {
return R.layout.activity_main;
}
@Override
protected void initView() {
radioGroup = findViewById(R.id.radioGroup);
radioGroup.check(radioGroup.getChildAt(0).getId());
listView = findViewById(R.id.listview);
}
@Override
protected void initData() {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
fragList = new FragList();
fragNull = new FragNull();
fragNull1 = new FragNull1();
transaction.add(R.id.frag,fragList);
transaction.add(R.id.frag,fragNull);
transaction.add(R.id.frag,fragNull1);
transaction.show(fragList).hide(fragNull).hide(fragNull1);
transaction.commit();
boolean workConnected = Http.isWorkConnected(MainActivity.this);
if(workConnected){
Http.httpAsyncTask(str, new Http.CallbackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson(s, JsonBean.class);
list = bean.getData();
listView.setAdapter(new CeAdapter(MainActivity.this, list));
}
});
}else{
Toast.makeText(this, "没有网络", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void bindEvent() {
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
switch (checkedId){
case R.id.radio0:
transaction1.show(fragList).hide(fragNull).hide(fragNull1);
break;
case R.id.radio1:
transaction1.show(fragNull).hide(fragList).hide(fragNull1);
break;
case R.id.radio2:
transaction1.show(fragNull1).hide(fragNull).hide(fragList);
}
transaction1.commit();
}
});
}
}
5.http
package com.bei.shuaibei.http;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Http {
public static boolean isWorkConnected(Context context){
if(context!=null){
ConnectivityManager manager =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null){
return info.isAvailable();
}
}
return false;
}
public static void httpAsyncTask(String strUrl,final CallbackString backString){
new AsyncTask<String, Integer, String>() {
@Override
protected String doInBackground(String... strings) {
return requestHttpGet(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
backString.getData(s);
}
}.execute(strUrl);
}
public interface CallbackString{
void getData(String s);
}
public static String requestHttpGet(String strUrl){
try {
URL url = new URL(strUrl);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if(code==200){
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
StringBuilder builder = new StringBuilder();
String str="";
while ((str=reader.readLine())!=null){
builder.append(str);
}
return builder.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
6app
package com.bei.shuaibei.app;
import android.app.Application;
import android.graphics.Bitmap;
import android.os.Environment;
import com.bei.shuaibei.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import java.io.File;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
String path = Environment.getDownloadCacheDirectory().getPath() + "/Tupian";
File file = new File(path);
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.zhan)
.showImageOnFail(R.mipmap.shibai)
.displayer(new CircleBitmapDisplayer())
.bitmapConfig(Bitmap.Config.ARGB_8888)
.build();
ImageLoaderConfiguration loaderConfiguration = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(options)
.memoryCacheExtraOptions(200,200)
.memoryCacheSize(2*1024*1024)
.threadPriority(1000)
.threadPoolSize(3)
.diskCache(new UnlimitedDiskCache(file))
.diskCacheFileCount(50)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50*1024*1024)
.build();
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(loaderConfiguration);
}
}
7.fraglist布局
<?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">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="#00000000"
android:divider="#19000000"
android:dividerHeight="4dp"
android:fadingEdge="none"
android:fastScrollEnabled="false"
android:footerDividersEnabled="false"
android:headerDividersEnabled="false"
android:smoothScrollbar="true"
/>
</LinearLayout>
8fraglistfragment
package com.bei.shuaibei.frag;
import android.content.ContentValues;
import android.database.Cursor;
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.bei.shuaibei.BaseFragment;
import com.bei.shuaibei.R;
import com.bei.shuaibei.adapter.MyAdapter;
import com.bei.shuaibei.bean.JsonBean;
import com.bei.shuaibei.http.Http;
import com.bei.shuaibei.sql.Dao;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class FragList extends BaseFragment {
private MyAdapter myAdapter;
private ArrayList<JsonBean.DataBean> list;
private PullToRefreshListView listp;
private String str="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
private Dao dao;
@Override
protected int bindLayout() {
return R.layout.fraglist;
}
@Override
protected void initView() {
listp = getActivity().findViewById(R.id.pull);
listp.setMode(PullToRefreshBase.Mode.BOTH);
listp.setSaveFromParentEnabled(true);
dao = new Dao(getActivity());
}
@Override
protected void initData() {
boolean workConnected=Http.isWorkConnected(getActivity());
if(workConnected){
Http.httpAsyncTask(str, new Http.CallbackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson(s, JsonBean.class);
list = bean.getData();
//Toast.makeText(getActivity(), ""+list.toString(), Toast.LENGTH_SHORT).show();
if(dao.query("json",null,null,null,null,null,null).moveToFirst()){
}else{
for (JsonBean.DataBean jsonbean:list){
ContentValues values = new ContentValues();
values.put("title",jsonbean.getNews_title());
values.put("img",jsonbean.getPic_url());
dao.insert("json",null,values);
}
}
myAdapter=new MyAdapter(getActivity(), list);
listp.setAdapter(myAdapter);
}
});
}else{
Cursor query = dao.query("json", null, null, null, null, null, null);
list = new ArrayList<>();
if(query.moveToFirst()){
do {
String title = query.getString(query.getColumnIndex("title"));
String img = query.getString(query.getColumnIndex("img"));
list.add(new JsonBean.DataBean(title,img));
}while (query.moveToNext());
}
query.close();
Toast.makeText(getActivity(), "没有网络", Toast.LENGTH_SHORT).show();
myAdapter=new MyAdapter(getActivity(),list);
listp.setAdapter(myAdapter);
}
}
@Override
protected void bindEvent() {
listp.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
if (Http.isWorkConnected(getActivity())){
Http.httpAsyncTask(str, new Http.CallbackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson(s, JsonBean.class);
list = bean.getData();
myAdapter= new MyAdapter(getActivity(),list);
listp.setAdapter(myAdapter);
listp.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(), "没有网络", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
if(Http.isWorkConnected(getActivity())){
Http.httpAsyncTask(str, new Http.CallbackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean bean = gson.fromJson(s, JsonBean.class);
ArrayList<JsonBean.DataBean> data = bean.getData();
list.addAll(data);
myAdapter.notifyDataSetChanged();
listp.onRefreshComplete();
}
});
}else{
Toast.makeText(getActivity(), "没有网络", Toast.LENGTH_SHORT).show();
}
}
});
}
}