<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
逻辑代码:
package com.example.gengqiang.Frgament;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.gengqiang.Bean;
import com.example.gengqiang.R;
import com.example.gengqiang.Tools.HttpUrlConnectionTools;
import com.example.gengqiang.Tools.NetWorkInfo;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.youth.banner.Banner;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
public class Fragments extends Fragment {
//定义需要的属性
private String url;
private PullToRefreshListView listView;
private ArrayList<Bean.ResultsBean> list = new ArrayList<>();
private DisplayImageOptions options;
private MAdapter mAdapter;
private Banner banner;
private String lunbo = "http://gank.io/api/data/" + URLEncoder.encode("福利") + "/10/1";
private ArrayList<String> list2 = new ArrayList<>();
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 1) {
String josn = (String) msg.obj;
Gson gson = new Gson();
Bean bean = gson.fromJson(josn, Bean.class);
List<Bean.ResultsBean> results = bean.getResults();
for (int i = 0; i < results.size(); i++) {
list2.add(results.get(i).getUrl());
}
banner.setImages(list2);
banner.setImageLoader(new com.youth.banner.loader.ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
ImageLoader instance = ImageLoader.getInstance();
instance.displayImage((String) path, imageView);
}
});
banner.start();
}
}
};
@Override
public void onResume() {
super.onResume();
//获取传入的接口
Bundle bundle = getArguments();
url = bundle.getString("URL");
//此方法设置图片参数
inItImageloader();
//判断网络
int netWorkInfo = NetWorkInfo.getNetWorkInfo(getActivity());
if (netWorkInfo != -1) {
//异步请求数据
inItdata(url);
//请求轮播数据
bannerUrl(lunbo);
}
}
//此方法设置图片参数
private void inItImageloader() {
// 设置图片下载期间显示的图片
// 设置图片Uri为空或是错误的时候显示的图片
// 设置图片加载或解码过程中发生错误显示的图片
// default 设置图片在加载前是否重置、复位
// 下载前的延迟时间
// default 设置下载的图片是否缓存在内存中
// default 设置下载的图片是否缓存在SD卡中
// default
// default 设置图片以如何的编码方式显示
// default 设置图片的解码类型
//设置图片显示的圆角度数
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher_round) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher_round) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher_round) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(false) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(false) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
.displayer(new RoundedBitmapDisplayer(10))//设置图片显示的圆角度数
.build();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_, null);
//加载头布局
View head_view = View.inflate(getActivity(), R.layout.head_view, null);
banner = (Banner) head_view.findViewById(R.id.banner);
listView = (PullToRefreshListView) view.findViewById(R.id.listview);
ListView refreshableView = listView.getRefreshableView();
refreshableView.addHeaderView(head_view);
//创建适配器
mAdapter = new MAdapter();
//设置上下拉模式
listView.setMode(PullToRefreshBase.Mode.BOTH);
listView.setAdapter(mAdapter);
//上下拉监听
listView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
list.clear();
int netWorkInfo = NetWorkInfo.getNetWorkInfo(getActivity());
if (netWorkInfo != -1) {
inItdata(url);
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
int netWorkInfo = NetWorkInfo.getNetWorkInfo(getActivity());
if (netWorkInfo != -1) {
inItdata(url);
}
}
});
return view;
}
//请求轮播数据发生给handler
private void bannerUrl(final String url) {
new Thread(new Runnable() {
@Override
public void run() {
String json = HttpUrlConnectionTools.getJson(url);
Message message = Message.obtain();
message.what = 1;
message.obj = json;
handler.sendMessage(message);
}
}).start();
}
//此方法返回Fragment的实例
public static Fragments getFragments(String Url) {
Fragments fragments = new Fragments();
Bundle bundle = new Bundle();
bundle.putString("URL", Url);
fragments.setArguments(bundle);
return fragments;
}
//异步请求数据
private void inItdata(String url) {
new MAsycTask().execute(url);
}
异步请求数据
class MAsycTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... strings) {
return HttpUrlConnectionTools.getJson(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
Bean bean = gson.fromJson(s, Bean.class);
List<Bean.ResultsBean> results = bean.getResults();
list.addAll(results);
//刷新适配器
mAdapter.notifyDataSetChanged();
//UI停止
listView.onRefreshComplete();
}
}
//创建多条目适配器
class MAdapter 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 int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
boolean b = position % 2 == 0;
if (b) {
return 0;
} else {
return 1;
}
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int itemViewType = getItemViewType(i);
switch (itemViewType) {
case 0:
ViewHolder01 viewHolder01;
if (view == null) {
viewHolder01 = new ViewHolder01();
view = View.inflate(getActivity(), R.layout.item01, null);
viewHolder01.tupian = (ImageView) view.findViewById(R.id.tupian);
viewHolder01.type = (TextView) view.findViewById(R.id.type);
viewHolder01.who = (TextView) view.findViewById(R.id.who);
view.setTag(viewHolder01);
} else {
viewHolder01 = (ViewHolder01) view.getTag();
}
ImageLoader instance = ImageLoader.getInstance();
instance.displayImage(list.get(i).getUrl(), viewHolder01.tupian, options);
viewHolder01.type.setText(list.get(i).getType());
viewHolder01.who.setText(list.get(i).getWho());
break;
case 1:
ViewHolder02 viewHolder02;
if (view == null) {
viewHolder02 = new ViewHolder02();
view = View.inflate(getActivity(), R.layout.item02, null);
viewHolder02.type = (TextView) view.findViewById(R.id.type);
viewHolder02.who = (TextView) view.findViewById(R.id.who);
view.setTag(viewHolder02);
} else {
viewHolder02 = (ViewHolder02) view.getTag();
}
viewHolder02.type.setText(list.get(i).getType());
viewHolder02.who.setText(list.get(i).getWho());
break;
}
return view;
}
}
//优化类
class ViewHolder01 {
ImageView tupian;
TextView type;
TextView who;
}
//优化类
class ViewHolder02 {
TextView type;
TextView who;
}
}