pulltorefresh插件上拉加载下拉刷新和数据库

记得导入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();
                }
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44258719/article/details/86477474