1. 程式人生 > >PullToRefreshScrollView+ViewPager無線輪播+ListView展示

PullToRefreshScrollView+ViewPager無線輪播+ListView展示

實現效果     拉動重新整理時,ViewPager與ListView都會有拉動的效果

///////////////////////////////佈局

<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="com.example.administrator.demo02.MainActivity"
> <com.handmark.pulltorefresh.library.PullToRefreshScrollView android:id="@+id/My_scrollview" xmlns:ptr="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrAnimationStyle="flip" ptr
:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/My_viewpager" android:layout_width=
"match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <com.example.administrator.demo02.listview.ListViewForRefresh android:id="@+id/My_listview" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.administrator.demo02.listview.ListViewForRefresh> </LinearLayout> </com.handmark.pulltorefresh.library.PullToRefreshScrollView> </LinearLayout>
//////////////////////////////////////////////////////////////////程式碼
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ScrollView;

import com.example.administrator.demo02.listview.ListViewForRefresh;
import com.example.administrator.demo02.util.JsonStringCallaBack;
import com.example.administrator.demo02.util.NetDataUtil;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private PullToRefreshScrollView scrollView;
    private ViewPager viewPager;
    private ListViewForRefresh listView;
    private Myadapter imageadapter;
    private ArrayAdapter<String> adapter;
    private int i = 1;
    private List<String> toplist = new ArrayList<>();
    private List<String> list;
    //建立圖片的集合
List<String> imagelist = new ArrayList<>();
    Handler handler = new Handler(){
        @Override
public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what == 0){
                //下一張,設定當前的圖片
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                //傳送延遲
handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };

    //主方法
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //找到控制元件
scrollView = (PullToRefreshScrollView) findViewById(R.id.My_scrollview);
        viewPager = (ViewPager) findViewById(R.id.My_viewpager);
        listView = (ListViewForRefresh) findViewById(R.id.My_listview);
        //從網路獲取資料
getDataFromNet();
        //支援上下拉動
scrollView.setMode(PullToRefreshBase.Mode.BOTH);
        //設定上下拉動展示的文字
initRefreshListView();


        //監聽事件
scrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2
<ScrollView>() {
            //下拉
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView>
 refreshView) {
                //重新整理資料
refreshData();

            }

            //上拉
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> 
refreshView) {
                //獲取資料
getDataFromNet();

            }
        });


        NetDataUtil.getData(MainActivity.this, "http://v.juhe.cn/toutiao/index?
type=top&key=93100289018f7f188cb0bd55bd3c5b38", new JsonStringCallaBack() {
            @Override
public void getJsonString(String json) {
                //解析  獲取圖片集合
Gson gson1 = new Gson();
         DateDateBean dateDateBean = gson1.fromJson(json, DateDateBean.class);
                List<DateDateBean.ResultBean.DataBean> date =
 dateDateBean.getResult().getData();
                //把所有的圖片放到集合中
for (DateDateBean.ResultBean.DataBean mydate:date) {
                    imagelist.add(mydate.getThumbnail_pic_s());
                }
                Log.d("TAGA","--------"+imagelist.size());
                //viewpager設定輪播圖效果介面卡
setimageadapter();
                //設定當前展示的頁面
viewPager.setCurrentItem(imagelist.size()*100000);
                //每隔兩秒傳送一次
handler.sendEmptyMessageDelayed(0,2000);
            }
        });

    }

    //重新整理資料   下拉時用
/**
     *
     */
private void refreshData() {
        NetDataUtil.getData(MainActivity.this, "http://japi.juhe.cn
/joke/content/list.from?key=9e47d352272a481e517dc83ea1e3637c&page=2
&pagesize=10&sort=asc&time=1418745237", new JsonStringCallaBack() {

            @Override
public void getJsonString(String json) {
                toplist.clear();
                list = new ArrayList<>();
                Gson gson = new Gson();
         DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
                List<DataDataBean.ResultBean.DataBean> data = 
dataDataBean.getResult().getData();
                for (DataDataBean.ResultBean.DataBean mydata : data) {
                    list.add(mydata.getContent());
                }
                Log.d("TAG", "++++++++++++++" + list.size());
                toplist.addAll(0, list);

                //設定介面卡
setadapter();
                //停止重新整理
scrollView.onRefreshComplete();


            }

        });

    }
    //從網路獲取資料
public void getDataFromNet() {
        NetDataUtil.getData(MainActivity.this, "http://
japi.juhe.cn/joke/content/list
.from?key=9e47d352272a481e517
dc83ea1e3637c&page=2&pagesize=10&sort=asc&time=1418745237"
, new JsonStringCallaBack() {


            @Override
public void getJsonString(String json) {
                list = new ArrayList<>();
                Gson gson = new Gson();
  DataDataBean dataDataBean = gson.fromJson(json, DataDataBean.class);
 List<DataDataBean.ResultBean.DataBean> data = dataDataBean.getResult().getData();
     for (DataDataBean.ResultBean.DataBean mydata : data) {
          list.add(mydata.getContent());
                }
                Log.d("TAG", "++++++++++++++" + list.size());
                toplist.addAll(list);

                //設定介面卡
setadapter();
                //停止重新整理
scrollView.onRefreshComplete();

            }


        });
    }

    //上下拉動時顯示的文字
public void initRefreshListView() {
        ILoadingLayout startLabels = scrollView
.getLoadingLayoutProxy(true, false);
        startLabels.setPullLabel("下拉重新整理");
        startLabels.setRefreshingLabel("正在拉");
        startLabels.setReleaseLabel("放開重新整理");
        ILoadingLayout endLabels = scrollView.getLoadingLayoutProxy(
                false, true);
        endLabels.setPullLabel("上拉重新整理");
        endLabels.setRefreshingLabel("正在載入...");
        endLabels.setReleaseLabel("放開重新整理...");
    }


    //文字的介面卡
private void setadapter() {
        if (adapter == null) {
            adapter = new ArrayAdapter<String>
(MainActivity.this, android.R.layout.simple_list_item_1, toplist);
            listView.setAdapter(adapter);
        } else {
            adapter.notifyDataSetChanged();
        }

    }
    //圖片的介面卡
private void setimageadapter() {
        if (imageadapter == null) {
            //建立介面卡
imageadapter = new Myadapter(MainActivity.this,imagelist,handler);
            //設定介面卡
viewPager.setAdapter(imageadapter);
        } else {
            //重新整理介面卡
imageadapter.notifyDataSetChanged();
        }
    }

}

////////////////////////////////////////////////////////////////////////////////////////////////////圖片的介面卡

class Myadapter extends PagerAdapter {
    Context context;
    List<String> list;
    Handler hander;

    public Myadapter(Context context, List<String> list, Handler handler) {
        this.list = list;
        this.context = context;
        this.hander = handler;
    }

    @Override
public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        //設定圖片平鋪整個控制元件
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        //使用網路獲取的圖片position%list.size()position控制在集合長度之內
ImageLoader.getInstance().displayImage
(list.get(position%list.size()),imageView, ImageLoaderUtil.display());
        container.addView(imageView);
        return imageView;
    }

    @Override
public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }


    @Override
public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}
///////////////////Listview放在重新整理控制元件中只能顯示一條,所以要建立一個類
public class ListViewForRefresh extends ListView {

    public ListViewForRefresh(Context context) {
        super(context);
    }

    public ListViewForRefresh(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListViewForRefresh(Context context, AttributeSet attrs, 
int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  //主要是這幾部分需要上網搜
 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}