1. 程式人生 > >終極模板02---重新整理載入

終極模板02---重新整理載入

fragmenttwo.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="#ffcccc">
    <android.support.design.widget.TabLayout
        android:id="@+id/taba"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        app:tabMode="fixed"
        ></android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/taba"
        app:layout_constraintBottom_toBottomOf="parent"
        ></android.support.v4.view.ViewPager>
</android.support.constraint.ConstraintLayout>

第二個佈局裡的抽屜佈局:
Fragmenttwo:

public class Fragmenttwo extends BaseFragment {

    private TabLayout tab;
    private ViewPager viewPager;

    @Override
    protected void initData() {

    }

    @Override
    protected void initView(View view) {
        tab = view.findViewById(R.id.taba);
        viewPager = view.findViewById(R.id.pager);
        TwoAdapter twoAdapter=new TwoAdapter(getChildFragmentManager());
        viewPager.setAdapter(twoAdapter);
        tab.setupWithViewPager(viewPager);
    }

    @Override
    protected int getLayoutResId() {
        return R.layout.fragmenttwo;
    }
}

介面卡:
TwoAdapter:

public class Fragmenttwo extends BaseFragment {

    private TabLayout tab;
    private ViewPager viewPager;

    @Override
    protected void initData() {

    }

    @Override
    protected void initView(View view) {
        tab = view.findViewById(R.id.taba);
        viewPager = view.findViewById(R.id.pager);
        TwoAdapter twoAdapter=new TwoAdapter(getChildFragmentManager());
        viewPager.setAdapter(twoAdapter);
        tab.setupWithViewPager(viewPager);
    }

    @Override
    protected int getLayoutResId() {
        return R.layout.fragmenttwo;
    }
}

frag.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="#ff6699"
    android:layout_height="match_parent">
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pulllist"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        ></com.handmark.pulltorefresh.library.PullToRefreshListView>
</android.support.constraint.ConstraintLayout>

重新整理載入:
Frag:

public class Frag extends BaseFragment {
    private int page;
    private String url;
    private PullToRefreshListView pull;
    private ZhengJiAdapter zhengJiAdapter;
    private final int COUNT=10;
    @Override
    protected void initData() {
        NetUtil.yibu(url + page, ZhengJiBean.class, new NetUtil.CallBack<ZhengJiBean>() {
            @Override
            public void getdata(ZhengJiBean o) {
                if (!o.ispanduan()||o==null){
                    Toast.makeText(getActivity(), "資料請求錯誤", Toast.LENGTH_SHORT).show();
                    //停止重新整理載入
                    pull.onRefreshComplete();
                    return ;
                }
                if (page==1){
                    Dao.getInstance(getActivity()).del(url.hashCode());
                }
                Dao.getInstance(getActivity()).addall(url.hashCode(),o.getResult());
                if(page==1){
                    //從資料庫中獲取
                    List<ZhengJiBean.Res> query = Dao.getInstance(getActivity()).query(url.hashCode());
                    zhengJiAdapter.setList(query);
                    //zhengJiAdapter.setList(o.getResult());
                }else{
                    List<ZhengJiBean.Res> query = Dao.getInstance(getActivity()).query(url.hashCode());
                    zhengJiAdapter.addList(query);
                    //dzhengJiAdapter.addList(o.getResult());
                }
                pull.onRefreshComplete();
                page++;
                if (o.getResult().size()<COUNT){
                    pull.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
                }else{
                    pull.setMode(PullToRefreshBase.Mode.BOTH);
                }
            }
        });
    }

    @Override
    protected void initView(View view) {
        url = getArguments().getString("url");
        page=1;
        //獲取資源ID
        pull = view.findViewById(R.id.pulllist);
        //設定介面卡
        zhengJiAdapter = new ZhengJiAdapter(getActivity());
        pull.setAdapter(zhengJiAdapter);
        //同時支援重新整理上拉
        pull.setMode(PullToRefreshBase.Mode.BOTH);
        pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                page=1;
                initData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                initData();
            }
        });
    }

    @Override
    protected int getLayoutResId() {
        return R.layout.frag;
    }
}

Bean:
ZhengJiBean:

public class ZhengJiBean {
    public String status;
    public String PAN="0000";
    public List<Res> result;
    public boolean ispanduan(){
        return PAN.equals(status);
    }

    public String getStatus() {
        return status;
    }

    public List<Res> getResult() {
        return result;
    }

    public static class Res{
        public String imageUrl;
        public String name;
        public String summary;

        public Res() {
        }

        public Res(String imageUrl, String name, String summary) {
            this.imageUrl = imageUrl;
            this.name = name;
            this.summary = summary;
        }

        public String getImageUrl() {
            return imageUrl;
        }

        public String getName() {
            return name;
        }

        public String getSummary() {
            return summary;
        }
    }
}

Image-loader:
App:

public class App extends AppApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        DisplayImageOptions options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .displayer(new RoundedBitmapDisplayer(20))
                .build();
        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
                .memoryCacheSizePercentage(10)
                .diskCacheSize(20*1024*1024)
                .defaultDisplayImageOptions(options)
                .build();
        ImageLoader.getInstance().init(configuration);
    }
}

介面卡:
ZhengJiAdapter:

public class ZhengJiAdapter extends BaseAdapter {
    private List<ZhengJiBean.Res> list;
    private Context context;

    public ZhengJiAdapter(Context context) {
        this.context = context;
        list=new ArrayList<>();
    }
    //更新重新整理


    public void setList(List<ZhengJiBean.Res> slist) {
        list.clear();
        if (slist!=null){
            list.addAll(slist);
        }
        notifyDataSetChanged();
    }

    //上拉載入
    public void addList(List<ZhengJiBean.Res> slist) {
        if (slist!=null){
            list.addAll(slist);
        }
        notifyDataSetChanged();
    }

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

    @Override
    public ZhengJiBean.Res getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView==null){
                convertView=LayoutInflater.from(context).inflate(R.layout.zhengji,parent,false);
                holder=new ViewHolder(convertView);
        }else{
            holder= (ViewHolder) convertView.getTag();
        }
        holder.getdata(getItem(position));
        return convertView;
    }
    class ViewHolder{
        private ImageView image;
        private TextView title;
        private TextView neirong;

        public ViewHolder(View convertView) {
            image=convertView.findViewById(R.id.im);
            title=convertView.findViewById(R.id.title);
            neirong=convertView.findViewById(R.id.neirong);
            convertView.setTag(this);
        }

        public void getdata(ZhengJiBean.Res item) {
            ImageLoader.getInstance().displayImage(item.getImageUrl(),image);
            title.setText(item.getName());
            neirong.setText(item.getSummary());
        }
    }
}

子條目佈局:
zhengji.xml:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ImageView
        android:id="@+id/im"
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_margin="5dp"
        />
    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toRightOf="@id/im"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:textSize="17sp"
        android:layout_margin="5dp"
        />
    <TextView
        android:id="@+id/neirong"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintLeft_toRightOf="@id/im"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/title"
        android:lines="2"
        android:layout_margin="5dp"
        />
</android.support.constraint.ConstraintLayout>

網路工具類:
NetUtil:

public class NetUtil {
    //介面回撥
    public interface CallBack<T>{
        void getdata(T t);
    }

    public static void yibu(String lujing, final Class clazz, final CallBack callBack) {
        new AsyncTask<String, Void, Object>() {
            @Override
            protected Object doInBackground(String... strings) {
                return NetUtil.jiexi(strings[0],clazz);
            }

            @Override
            protected void onPostExecute(Object o) {
                callBack.getdata(o);
            }
        }.execute(lujing);
    }
    //網路解析
    public static <T> T jiexi(String lujing,Class clazz){
        T t= (T) new Gson().fromJson(NetUtil.geturl(lujing),clazz);
        return t;
    }
    //網路請求
    public static String geturl(String lujing){
        String result="";
        try {
            //定義地址
            URL url=new URL(lujing);
            //開啟連線
            HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
            //請求方法
            urlConnection.setRequestMethod("GET");
            //讀取超時
            urlConnection.setReadTimeout(5000);
            //連線超時
            urlConnection.setConnectTimeout(5000);
            if (urlConnection.getResponseCode()==200){
                result=NetUtil.zifu(urlConnection.getInputStream());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    private static String zifu(InputStream inputStream) throws IOException {
        InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
        BufferedReader buff=new BufferedReader(inputStreamReader);
        StringBuilder builder=new StringBuilder();
        for (String imp=buff.readLine();imp!=null;imp=buff.readLine()){
            builder.append(imp);
        }
        return builder.toString();
    }
}

資料庫:
SqliteHelper:

public class SqliteHelper extends SQLiteOpenHelper {
    private static final String name="User.db";
    private static final int version=1;
    public SqliteHelper(@Nullable Context context) {
        super(context, name, null, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table users (id integer primary key autoincrement," +
                "name text," +
                "message text," +
                "image text," +
                "type integer)");
    }

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

    }
}

Dao:

public class Dao {
    private static Dao instance;
    private SqliteHelper helper;
    private SQLiteDatabase sb;
    private Dao(Context context){
        helper=new SqliteHelper(context);
        sb=helper.getReadableDatabase();
    }
    public static Dao getInstance(Context context){
        if (instance==null){
            instance=new Dao(context);
        }
        return instance;
    }
    public void add(ZhengJiBean.Res res,int type){
        ContentValues values=new ContentValues();
        values.put("name",res.getName());
        values.put("message",res.getSummary());
        values.put("image",res.getImageUrl());
        values.put("type",type);
        sb.insert("users",null,values);
    }
    public void addall(int type, List<ZhengJiBean.Res> list){
        for (ZhengJiBean.Res cc:list){
            add(cc,type);
        }
    }
    public void del(int type){
        sb.delete("users","type=?",new String[]{String.valueOf(type)});
    }
    public List<ZhengJiBean.Res> query(int type){
        List<ZhengJiBean.Res> list=new ArrayList<>();
        Cursor cursor = sb.query("users", null, "type=?", new String[]{String.valueOf(type)}, null, null, null);
        if (cursor!=null){
            while(cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String message=cursor.getString(cursor.getColumnIndex("message"));
                String image = cursor.getString(cursor.getColumnIndex("image"));
                ZhengJiBean.Res res=new ZhengJiBean.Res(image,name,message);
                list.add(res);
            }
            cursor.close();
        }
        return list;
    }
}