<?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 xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/pull" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#000000" android:divider="#19000000" android:dividerHeight="4dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" ptr:ptrAnimationStyle="rotate" ptr:ptrDrawable="@mipmap/ic_launcher" ptr:ptrHeaderBackground="@null" ptr:ptrHeaderSubTextColor="#00ffff" ptr:ptrHeaderTextColor="#ffffff" /></LinearLayout>
//item
<?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"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv" android:layout_gravity="center"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/img"/></LinearLayout>
//主方法
package com.bawei.dangzhentao20170918;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ViewPager vp; private TabLayout tabLayout; private String[] channels={"福利","Android","iOS","休息视频","拓展资源","前端","all"}; private String[] urls={"https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=2", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=3", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=4", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=5", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=6", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=7"}; private LayoutInflater in; private List<ChannelFragment> nview=new ArrayList<ChannelFragment>(); private ChannelFragment fragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vp = (ViewPager) findViewById(R.id.vp); tabLayout = (TabLayout) findViewById(R.id.tabs); in = LayoutInflater.from(this); //创建fragment for(int i=0;i<channels.length;i++){ fragment=new ChannelFragment(); Bundle b=new Bundle(); b.putString("url",urls[i]); fragment.setArguments(b); nview.add(fragment); tabLayout.addTab(tabLayout.newTab().setText(channels[i])); } FragmentManager fm = getSupportFragmentManager(); MyFragmentAdapter adapter = new MyFragmentAdapter(fm, nview); vp.setAdapter(adapter); tabLayout.setupWithViewPager(vp); tabLayout.setTabsFromPagerAdapter(adapter); } class MyFragmentAdapter extends FragmentPagerAdapter{ private List<ChannelFragment> nview; public MyFragmentAdapter(FragmentManager fm,List<ChannelFragment> nview) { super(fm); this.nview=nview; } @Override public Fragment getItem(int position) { return nview.get(position); } @Override public int getCount() { return nview.size(); } @Override public CharSequence getPageTitle(int position) { return channels[position]; } }}
//Fragment+PullToRefershListView代码
package com.bawei.dangzhentao20170918;import android.os.AsyncTask;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.text.format.DateUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import com.google.gson.Gson;import com.handmark.pulltorefresh.library.PullToRefreshBase;import com.handmark.pulltorefresh.library.PullToRefreshListView;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.List;/** * Created by *** on 2017/9/18. * fragment */public class ChannelFragment extends Fragment { private String new_url; private ListView lv; private PullToRefreshListView pullToRefreshListView; private Adapter adapter; private List<Results> results; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle bundle=getArguments(); new_url = (String) bundle.get("url"); } @Nullable @Override public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment, null); pullToRefreshListView = (PullToRefreshListView) view.findViewById(R.id.pull); new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... params) { String url=params[0]; String ss=""; URL url1=null; HttpURLConnection httpURLConnection=null; try { url1=new URL(url); httpURLConnection= (HttpURLConnection) url1.openConnection(); httpURLConnection.setConnectTimeout(5000); httpURLConnection.setReadTimeout(5000); int responseCode = httpURLConnection.getResponseCode(); if(responseCode==200){ InputStream inputStream = httpURLConnection.getInputStream(); int len=0; byte[] b=new byte[1024*1024]; while ((len=inputStream.read(b))!=-1){ ss+=new String(b,0,len); } inputStream.close(); } } catch (Exception e) { e.printStackTrace(); } return ss; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Bean bean = new Gson().fromJson(s, Bean.class); results = bean.getNewslist(); adapter = new Adapter(getActivity(), results); pullToRefreshListView.setAdapter(adapter); pullToRefreshListView.onRefreshComplete(); } }.execute(new_url); pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { String label = DateUtils.formatDateTime(getActivity().getApplicationContext(), System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... params) { String url=params[0]; String ss=""; URL url1=null; HttpURLConnection httpURLConnection=null; try { url1=new URL(url); httpURLConnection= (HttpURLConnection) url1.openConnection(); httpURLConnection.setConnectTimeout(5000); httpURLConnection.setReadTimeout(5000); int responseCode = httpURLConnection.getResponseCode(); if(responseCode==200){ InputStream inputStream = httpURLConnection.getInputStream(); int len=0; byte[] b=new byte[1024*1024]; while ((len=inputStream.read(b))!=-1){ ss+=new String(b,0,len); } inputStream.close(); } } catch (Exception e) { e.printStackTrace(); } return ss; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Bean bean = new Gson().fromJson(s, Bean.class); results = bean.getNewslist(); adapter = new Adapter(getActivity(), results); pullToRefreshListView.setAdapter(adapter); pullToRefreshListView.onRefreshComplete(); } }.execute(new_url); } }); pullToRefreshListView.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() { @Override public void onLastItemVisible() { new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... params) { String url=params[0]; String ss=""; URL url1=null; HttpURLConnection httpURLConnection=null; try { url1=new URL(url); httpURLConnection= (HttpURLConnection) url1.openConnection(); httpURLConnection.setConnectTimeout(5000); httpURLConnection.setReadTimeout(5000); int responseCode = httpURLConnection.getResponseCode(); if(responseCode==200){ InputStream inputStream = httpURLConnection.getInputStream(); int len=0; byte[] b=new byte[1024*1024]; while ((len=inputStream.read(b))!=-1){ ss+=new String(b,0,len); } inputStream.close(); } } catch (Exception e) { e.printStackTrace(); } return ss; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Bean bean = new Gson().fromJson(s, Bean.class); List<Results> resultss = bean.getNewslist(); results.addAll(resultss); adapter.notifyDataSetChanged(); pullToRefreshListView.onRefreshComplete(); } }.execute(new_url); } }); return view; }}
//适配器
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageSize; import java.util.List;public class Myadapter extends BaseAdapter { private List<JavaBean.ResultBean.DataBean> data; private Context context; public Myadapter(List<JavaBean.ResultBean.DataBean> data, Context context) { this.data = data; this.context = context; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int i) { return data.get(i); } @Override public long getItemId(int i) { return i; } //判断子条目的布局 @Override public int getItemViewType(int position) { int re=0; if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()!=null&&data.get(position).getThumbnail_pic_s03()!=null){ re=0; } else if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()!=null&&data.get(position).getThumbnail_pic_s03()==null){ re=1; } else if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()==null&&data.get(position).getThumbnail_pic_s03()==null){ re=2; } return re; } @Override public int getViewTypeCount() { return 3; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder1 holder1=null; ViewHolder2 holder2=null; ViewHolder3 holder3=null; int re = getItemViewType(i); if(re==0){ if(view==null){ view=View.inflate(context,R.layout.item1,null); holder1=new ViewHolder1(); holder1.tv=(TextView) view.findViewById(R.id.tv); holder1.image1=(ImageView)view.findViewById(R.id.image1); holder1.image2=(ImageView)view.findViewById(R.id.image2); holder1.image3=(ImageView)view.findViewById(R.id.image3); view.setTag(holder1); }else{ holder1= (ViewHolder1) view.getTag(); } holder1.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); String thumbnail_pic_s02 = data.get(i).getThumbnail_pic_s02(); String thumbnail_pic_s03 = data.get(i).getThumbnail_pic_s03(); ImageSize size=new ImageSize(100,100); ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder1.image1,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s02,holder1.image2,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s03,holder1.image3,size); }else if(re==1){ if(view==null){ view=View.inflate(context,R.layout.item2,null); holder2=new ViewHolder2(); holder2.tv=(TextView) view.findViewById(R.id.tv); holder2.image1=(ImageView)view.findViewById(R.id.image1); holder2.image2=(ImageView)view.findViewById(R.id.image2); view.setTag(holder2); }else{ holder2= (ViewHolder2) view.getTag(); } holder2.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); String thumbnail_pic_s02 = data.get(i).getThumbnail_pic_s02(); ImageSize size=new ImageSize(100,100); ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder2.image1,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s02,holder2.image2,size); }else if(re==2){ if(view==null){ view= View.inflate(context,R.layout.item3,null); holder3=new ViewHolder3(); holder3.tv=(TextView) view.findViewById(R.id.tv); holder3.image1=(ImageView)view.findViewById(R.id.image1); view.setTag(holder3); }else{ holder3= (ViewHolder3) view.getTag(); } holder3.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); ; ImageSize size=new ImageSize(100,100); ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder3.image1,size); } return view; } class ViewHolder3{ TextView tv; ImageView image1; } class ViewHolder2{ TextView tv; ImageView image1; ImageView image2; } class ViewHolder1{ TextView tv; ImageView image1; ImageView image2; ImageView image3; }}
//ImageLoader配置
package com.bwei.utils;import java.io.File;import android.app.Application;import android.graphics.Bitmap;import android.os.Environment;import com.bwei.main.R;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;import com.nostra13.universalimageloader.core.download.BaseImageDownloader;public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( MyApplication.this) // max width, max height,即保存的每个缓存文件的最大宽高 .memoryCacheExtraOptions(100, 100) // 线程池内加载的数量 .threadPoolSize(3) .threadPriority(Thread.NORM_PRIORITY - 1) .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) .memoryCacheSize(2 * 1024 * 1024) .diskCacheSize(50 * 1024 * 1024) // 将保存的时候的URI名称用MD5 加密 .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .diskCacheFileCount(100) // 自定义缓存路径 .diskCache(new UnlimitedDiskCache(new File(Environment.getExternalStorageDirectory() +""))) .denyCacheImageMultipleSizesInMemory() .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密 .tasksProcessingOrder(QueueProcessingType.FIFO) .defaultDisplayImageOptions(getDisplayOptions()) .imageDownloader(new BaseImageDownloader(this, 5*1000, 30*1000)) //.writeDebugLogs() .build(); //开始构建 ImageLoader.getInstance().init(config); } private DisplayImageOptions getDisplayOptions() { DisplayImageOptions options; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) // 设置图片在下载期间显示的图片 .showImageForEmptyUri(R.mipmap.ic_launcher)// 设置图片Uri为空或是错误的时候显示的图片 .showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载/解码过程中错误时候显示的图片 .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 .cacheOnDisc(true)// 设置下载的图片是否缓存在SD卡中 .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)// 设置图片以如何的编码方式显示 .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// // .delayBeforeLoading(int delayInMillis)//int // delayInMillis为你设置的下载前的延迟时间 // 设置图片加入缓存前,对bitmap进行设置 // .preProcessor(BitmapProcessor preProcessor) .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位 .displayer(new RoundedBitmapDisplayer(20))// 是否设置为圆角,弧度为多少 .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 .build();// 构建完成 return options; }}