首先还是导依赖包
compile 'com.bigkoo:convenientbanner:2.0.5'
compile 'com.jwenfeng.pulltorefresh:library:1.0.3'
compile project(':library')
主页面布局<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.bigkoo.convenientbanner.ConvenientBanner
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="230dp"
android:id="@+id/banner"
android:layout_alignParentTop="true"
app:canLoop="true"
/>
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pu_lv"
android:layout_below="@+id/banner">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</RelativeLayout>
ListView的Item布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/img"
android:layout_alignParentLeft="true"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/img"
android:layout_marginTop="30dp"
android:layout_marginLeft="10dp"
android:id="@+id/titles"
android:text="标题"
/>
<TextView
android:id="@+id/desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/img"
android:layout_below="@id/titles"
android:layout_marginTop="30dp"
android:layout_marginLeft="10dp"
android:text="描述"
/>
<TextView
android:id="@+id/times"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@id/titles"
android:layout_marginTop="30dp"
android:layout_marginRight="20dp"
android:text="时间"
/>
</RelativeLayout>
网络接口类
package com.example.app6_longbolistview;
/**
* Created by ZhangTAO on 2017/9/15.
*/
public class Url {
public static String path = "http://api.tianapi.com/apple/?key=c8bb8de75b2287a6c6c390c50afb21e1";
}
主页面代码
package com.example.app6_longbolistview;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.bigkoo.convenientbanner.ConvenientBanner;
import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;
import com.bigkoo.convenientbanner.holder.Holder;
import com.bigkoo.convenientbanner.listener.OnItemClickListener;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import Bean.JsonRootBean;
import Bean.Newslist;
public class MainActivity extends AppCompatActivity implements OnItemClickListener{
//获取控件以及定义变量
private ConvenientBanner banner;
private List<String> alist=new ArrayList<>();
private ImageLoader imageLoader;
private List<Newslist> datas;
private ImageView imageView;
private MyAdapter adapter;
private PullToRefreshListView lvs;
private String page = "&num=";
private int count = 10;
private Handler ler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == 0x12) {
for (int i = 0;i < 6;i++) {
alist.add(datas.get(i).getPicUrl());
}
}
getinit();
if (msg.what == 0x11) {
adapter.setDatas(datas);
adapter.notifyDataSetChanged();
lvs.onRefreshComplete();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
//获取异步对象
MyTask task = new MyTask();
//执行异步
task.execute();
}
private void init() {
//获取控件
banner = (ConvenientBanner) findViewById(R.id.banner);
lvs = (PullToRefreshListView) findViewById(R.id.pu_lv);
//初始化图片加载
imageLoader = ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(this));
}
private void getinit() {
//开始自动翻页
banner.setPages(new CBViewHolderCreator<NetWorkLoacl>() {
@Override
public NetWorkLoacl createHolder() {
return new NetWorkLoacl();
}
},alist)
//设置指示器是否可见
.setPointViewVisible(true)
//设置自动切换(同时设置了切换时间间隔)
.startTurning(2000)
//设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设
.setPageIndicator(new int[]{R.drawable.kong, R.drawable.shi})
//设置指示器的方向(左、中、右)
.setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.ALIGN_PARENT_RIGHT)
//设置点击监听事件
.setOnItemClickListener(this)
//设置手动影响(设置了该项无法手动切换)
.setManualPageable(true);
}
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this,"position:"+position,Toast.LENGTH_SHORT).show();
}
private class NetWorkLoacl implements Holder<String> {
@Override
public View createView(Context context) {
//建立一个ImageView
imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
@Override
public void UpdateUI(Context context, int position, String data) {
//获取路径并图
imageLoader.getInstance().displayImage(data,imageView);
}
}
private boolean getDatamore(final String url) {
boolean flag = true;
try {
URL path = new URL(url);
HttpURLConnection connection = (HttpURLConnection) path.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
int code = connection.getResponseCode();
if (code == 200) {
InputStream stream = connection.getInputStream();
String json = streamToString(stream,"utf-8");
// Log.d("zzz",json.toString());
Gson gs = new Gson();
JsonRootBean fromJson = gs.fromJson(json.toString(), JsonRootBean.class);
datas = fromJson.getNewslist();
// Log.d("aaa",datas.toString());
}else {
flag = false;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return flag;
}
private String streamToString(InputStream input,String charset) {
String con = null;
InputStreamReader inputStreamReader = new InputStreamReader(input);
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(inputStreamReader);
try {
while ((con = reader.readLine()) != null) {
builder.append(con);
}
return builder.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
class MyTask extends AsyncTask<String,Integer,String> {
@Override
protected String doInBackground(String... strings) {
getDatamore(Url.path+page+count);
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
adapter = new MyAdapter(MainActivity.this,datas);
lvs.setAdapter(adapter);
Message message = new Message();
message.what = 0x12;
ler.sendMessage(message);
lvs.setMode(PullToRefreshBase.Mode.BOTH);
lvs.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
lvs.postDelayed(new Runnable() {
@Override
public void run() {
adapter.notifyDataSetChanged();
lvs.onRefreshComplete();
}
},2000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
new Thread(new Runnable() {
@Override
public void run() {
count = count+10;
getDatamore(Url.path+page+count);
Log.d("zzz",Url.path+page+count);
Message message = new Message();
message.what = 0x11;
ler.sendMessageDelayed(message,2000);
}
}).start();
}
});
}
}
}
设置适配器
package com.example.app6_longbolistview;
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 java.util.List;
import Bean.Newslist;
/**
* Created by ZhangTAO on 2017/9/15.
*/
public class MyAdapter extends BaseAdapter{
Context context;
List<Newslist> datas;
public MyAdapter(Context context, List<Newslist> datas) {
this.context = context;
this.datas = datas;
}
public List<Newslist> getDatas() {
return datas;
}
public void setDatas(List<Newslist> datas) {
this.datas = datas;
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int i) {
return datas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHodler hodler = null;
if (view == null) {
view = View.inflate(context, R.layout.xlist_item, null);
hodler = new ViewHodler();
hodler.img = view.findViewById(R.id.img);
hodler.title = view.findViewById(R.id.titles);
hodler.desc = view.findViewById(R.id.desc);
hodler.time = view.findViewById(R.id.times);
view.setTag(hodler);
}else {
hodler = (ViewHodler) view.getTag();
}
ImageLoader.getInstance().displayImage(datas.get(i).getPicUrl(),hodler.img);
hodler.title.setText(datas.get(i).getTitle());
hodler.desc.setText(datas.get(i).getDescription());
hodler.time.setText(datas.get(i).getCtime());
return view;
}
static class ViewHodler {
ImageView img;
TextView title;
TextView desc;
TextView time;
}
}