1. 程式人生 > >使用PullToRefresh展示資料,側滑展示listview

使用PullToRefresh展示資料,側滑展示listview

1.先看我們的主頁面佈局,主頁面用qq頁面做

<?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"
    android:orientation="vertical"

    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/radiobutton1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:button="@null"
                    android:gravity="center"
                    android:padding="7dp"
                    android:text="listview" />

                <RadioButton
                    android:id="@+id/radiobutton2"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:button="@null"
                    android:gravity="center"
                    android:padding="7dp"
                    android:text="gridview" />
            </RadioGroup>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="left">

            <ImageView
                android:id="@+id/imagetu"
                android:layout_width="150dp"
                android:layout_height="150dp" />

            <ListView
                android:id="@+id/listview"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

2.再來看主activity的程式碼

public class MainActivity extends BaseActivity {

    private RadioGroup radioGroup;
    private FragList fragList;
    private FragGrid fragGrid;
    private ImageView im;
    private String str = "http://www.xieast.com/api/news/news.php?page=4";
    private String ss;
    private ListView listView;

    @Override
    protected int bindLayout() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        listView = findViewById(R.id.listview);
        radioGroup = findViewById(R.id.radiogroup);
        im = findViewById(R.id.imagetu);
        ss = "http://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&u" +
                "rl=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201410%2F05%2F20141005082835_2RTzn.t" +
                "humb.700_0.jpeg&thumburl=http%3A" +
                "%2F%2Fimg2.imgtn.bdimg.com%2Fit%2Fu%3D3846895839%2C2711067435%26fm%3D26%26gp%3D0.jpg";
        radioGroup.check(radioGroup.getChildAt(0).getId());
        ImageLoader.getInstance().displayImage(ss, im);
    }

    @Override
    protected void initData() {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        fragList = new FragList();
        fragGrid = new FragGrid();
        transaction.add(R.id.frag, fragList);
        transaction.add(R.id.frag, fragGrid);
        transaction.hide(fragGrid).show(fragList);
        transaction.commit();
        HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() {
            @Override
            public void getData(String s) {
                if (HttpUtil.isworkConnected(MainActivity.this)) {
                    Gson gson = new Gson();
                    JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                    List<JsonBean.DataBean> data = jsonBean.getData();
                    listView.setAdapter(new MyListAdadapter(MainActivity.this, data));
                }
            }
        });

    }

    @Override
    protected void bindEvent() {
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                FragmentTransaction ttt = getSupportFragmentManager().beginTransaction();
                switch (checkedId) {
                    case R.id.radiobutton1:
                        ttt.hide(fragGrid).show(fragList);
                        break;
                    case R.id.radiobutton2:
                        ttt.hide(fragList).show(fragGrid);
                        break;
                }
                ttt.commit();
            }
        });

    }
}

3.再來看pullToRefresh的程式碼,先判斷網路,沒有網路就解析本地資料,有網就通過介面解析網路資料,並新增資料庫。

public class FragList extends BaseFragment {
    private String str = "http://www.xieast.com/api/news/news.php?page=4";
    private PullToRefreshListView pullToRefreshListView;
    private List<JsonBean.DataBean> data;
    private MyListAdadapter myListAdadapter;
    private Dao dao;

    @Override
    protected int bindLayout() {
        return R.layout.frag_list;
    }

    @Override
    protected void initView() {
        pullToRefreshListView = getActivity().findViewById(R.id.pull_lists);
        pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH);
        pullToRefreshListView.setScrollingWhileRefreshingEnabled(true);
        dao = new Dao(getActivity());
    }

    @Override
    protected void initData() {
        boolean b = HttpUtil.isworkConnected(getActivity());
        if (b) {
            HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() {
                @Override
                public void getData(String s) {
                    Gson gson = new Gson();
                    JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                    data = jsonBean.getData();
                    if (dao.query("person", null, null, null, null, null, null).moveToFirst()) {

                    } else {
                        for (JsonBean.DataBean dataBean : data) {
                            ContentValues values = new ContentValues();
                            values.put("name", dataBean.getAuthor_name());
                            values.put("img", dataBean.getThumbnail_pic_s());
                            dao.insert("person", null, values);
                        }
                    }
                    myListAdadapter = new MyListAdadapter(getActivity(), data);
                    pullToRefreshListView.setAdapter(myListAdadapter);
                }
            });
        } else {
            List<JsonBean.DataBean> sdJson = getSDJson();
            for (JsonBean.DataBean bean : sdJson) {
                ContentValues values = new ContentValues();
                values.put("name", bean.getTitle());
                values.put("img", bean.getThumbnail_pic_s());
                dao.insert("person", null, values);
            }
            Cursor cursor = dao.query("person", null, null, null, null, null, null);
            data = new ArrayList<>();
            if (cursor.moveToFirst()) {
                do {
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    String img = cursor.getString(cursor.getColumnIndex("img"));
                    data.add(new JsonBean.DataBean(name, img));
                } while (cursor.moveToNext());
            }
            cursor.close();
            Toast.makeText(getActivity(), "沒有網路", Toast.LENGTH_SHORT).show();

            pullToRefreshListView.setAdapter(new MyListAdadapter(getActivity(), data));
        }
    }

    private List<JsonBean.DataBean> getSDJson() {

        try {
            InputStream open = getActivity().getAssets().open("mmm.json");
            BufferedReader reader = new BufferedReader(new InputStreamReader(open));
            Gson gson = new Gson();
            JsonBean jsonBean = gson.fromJson(reader, JsonBean.class);
            List<JsonBean.DataBean> data = jsonBean.getData();
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return data;
    }

    @Override
    protected void bindEvent() {
        pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() {
                    @Override
                    public void getData(String s) {
                        if (HttpUtil.isworkConnected(getActivity())) {
                            Gson gson = new Gson();
                            JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                            data = jsonBean.getData();
                            myListAdadapter = new MyListAdadapter(getActivity(), data);
                            pullToRefreshListView.setAdapter(myListAdadapter);
                            pullToRefreshListView.onRefreshComplete();
                        }
                    }
                });
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() {
                    @Override
                    public void getData(String s) {
                        if (HttpUtil.isworkConnected(getActivity())) {
                            Gson gson = new Gson();
                            JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                            List<JsonBean.DataBean> data1 = jsonBean.getData();
                            data.addAll(data1);
                            myListAdadapter.notifyDataSetChanged();
                            pullToRefreshListView.onRefreshComplete();
                        }
                    }
                });
            }
        });
    }
}

4.接著看一下pullTorefresh的佈局

<?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"
    android:orientation="vertical">

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_lists"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

5.接下來寫介面卡,我兩個列表展示的資料是同一個資料,所以介面卡也共用了一個



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;
com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;
ic class MyListAdadapter extends BaseAdapter {

    private Context context;
    private List<JsonBean.DataBean> list;

    public MyListAdadapter(Context context, List<JsonBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @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 3;
    }
    @Override
    public int getItemViewType(int position) {
        return position % 3;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        switch (getItemViewType(position)) {
            case 0:
                ViewHolder1 holder1;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
                    holder1 = new ViewHolder1();
                    holder1.view1 = convertView.findViewById(R.id.name1);
                    holder1.img1 = convertView.findViewById(R.id.image1);
                    convertView.setTag(holder1);
                } else {
                    holder1 = (ViewHolder1) convertView.getTag();
                }
                holder1.view1.setText(list.get(position).getAuthor_name()+"");
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder1.img1);
                break;
            case 1:
                ViewHolder2 holder2;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(R.layout.item_two, null);
                    holder2 = new ViewHolder2();
                    holder2.view2 = convertView.findViewById(R.id.name2);
                    holder2.img2 = convertView.findViewById(R.id.image2);
                    convertView.setTag(holder2);
                } else {
                    holder2 = (ViewHolder2) convertView.getTag();
                }
                holder2.view2.setText(list.get(position).getAuthor_name()+"");
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder2.img2);
                break;
            case 2:
                ViewHolder3 holder3;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(R.layout.item_three, null);
                    holder3 = new ViewHolder3();
                    holder3.view3 = convertView.findViewById(R.id.name3);
                    holder3.img3 = convertView.findViewById(R.id.image3);
                    convertView.setTag(holder3);
                } else {
                    holder3 = (ViewHolder3) convertView.getTag();
                }
                holder3.view3.setText(list.get(position).getAuthor_name()+"");
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder3.img3);
                break;
        }
        return convertView;
    }

    class ViewHolder1 {
        TextView view1;
        ImageView img1;
    }
    class ViewHolder2 {
        TextView view2;
        ImageView img2;
    }
    class ViewHolder3 {
        TextView view3;
        ImageView img3;
    }
}