簡單PullToRefreshListView+ViewPager無限輪播
阿新 • • 發佈:2019-01-23
//主佈局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/llll" 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.lxb.MainActivity"> <com.handmark.pulltorefresh.library.PullToRefreshListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pt" > </com.handmark.pulltorefresh.library.PullToRefreshListView> </LinearLayout>
//viewpager 的佈局
<?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" > <android.support.v4.view.ViewPager android:layout_width="match_parent"//listview展示資料的佈局android:layout_height="300dp" android:id="@+id/vp" ></android.support.v4.view.ViewPager> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/ll" android:orientation="horizontal" ></LinearLayout> </LinearLayout>
<?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" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/img" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/name" /> </LinearLayout>//程式碼
package com.example.lxb; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import com.nostra13.universalimageloader.core.ImageLoader; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private PullToRefreshListView pt; private ViewPager vp; List<User> list=new ArrayList<User>(); int i=1; private MainActivity.ptdata ptdata; private ArrayList<ImageView> imagelist; private LinearLayout ll; private ImageView view;
//延時 Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int i = vp.getCurrentItem() + 1; vp.setCurrentItem(i); handler.sendEmptyMessageDelayed(0,2000); } }; private List<Bean.NewslistBean> newslist; private LinearLayout lll; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); pt =(PullToRefreshListView)findViewById(R.id.pt); View view = View.inflate(MainActivity.this, R.layout.vp, null); vp=(ViewPager)view.findViewById(R.id.vp); ll =(LinearLayout)view.findViewById(R.id.ll); ListView listView = pt.getRefreshableView(); listView.addHeaderView(view); pt.setMode(PullToRefreshBase.Mode.BOTH); ptdata = new ptdata(); pt.setAdapter(ptdata); handler.sendEmptyMessageDelayed(0,2000); //非同步執行緒操作 new Mysanysk().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"); pt.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { ll.removeAllViews(); list.clear(); i=1; new Mysanysk().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10"); ptdata.notifyDataSetChanged(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { i++; new Mysanysk().execute("https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num="+i); } }); vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i=0;i<imagelist.size();i++){ if(position%newslist.size()==i){ imagelist.get(position%newslist.size()).setImageResource(R.drawable.dot_focus); }else{ imagelist.get(i).setImageResource(R.drawable.dot_normal); } } } @Override public void onPageScrollStateChanged(int state) { } }); } //加點方法 private void nodata() { imagelist =new ArrayList<ImageView>(); if(imagelist!=null){ imagelist.clear(); } for (int i=0;i<newslist.size();i++){ view = new ImageView(this); if(i==vp.getCurrentItem()){ view.setImageResource(R.drawable.dot_focus); }else{ view.setImageResource(R.drawable.dot_normal); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20); params.setMargins(10,0,10,0); imagelist.add(view); ll.addView(view,params); } } class Mysanysk extends AsyncTask<String,Void,String>{ private URL url; private StringBuilder builder; @Override protected String doInBackground(String... strings) { try { url = new URL(strings[0]); URLConnection connection = url.openConnection(); InputStream stream = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); builder = new StringBuilder(); String tem=""; while((tem=reader.readLine())!=null){ builder.append(tem); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Log.e("=======讀取到的資料==========",builder.toString()); return builder.toString(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); Bean bean = gson.fromJson(s, Bean.class); newslist = bean.getNewslist(); for (int i = 0; i< newslist.size(); i++){ String picUrl = newslist.get(i).getPicUrl(); String title = newslist.get(i).getTitle(); list.add(new User(title,picUrl)); } vp.setAdapter(new vpdata()); nodata(); ptdata.notifyDataSetChanged();//重新整理介面卡 pt.onRefreshComplete();//關閉方法 } } class ptdata extends BaseAdapter{ @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder vh; if(view==null){ vh=new ViewHolder(); view=View.inflate(MainActivity.this,R.layout.textview,null); vh.name=(TextView)view.findViewById(R.id.name); vh.img=(ImageView)view.findViewById(R.id.img); view.setTag(vh); }else{ vh=(ViewHolder)view.getTag(); } vh.name.setText(list.get(i).name); ImageLoader.getInstance().displayImage(list.get(i).url,vh.img); return view; } class ViewHolder{ TextView name; ImageView img; } } class vpdata extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { String picUrl = newslist.get(position%newslist.size()).getPicUrl(); View view = View.inflate(MainActivity.this,R.layout.vptextview,null); ImageView img=(ImageView)view.findViewById(R.id.img2); ImageLoader.getInstance().displayImage(picUrl,img); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } } }