MainActivity
package com.bwie.myweek2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.example.xlistview.me.maxwin.view.XListView;
public class MainActivity extends AppCompatActivity {
private String urlStr = "http://api.expoon.com/AppNews/getNewsList/type/1/p/%d";
private XListView xListView;
private XListAdapter mAdapter;
private int mPage = 1;
private int COUNT = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//资源ID
xListView = findViewById(R.id.xListView);
mAdapter = new XListAdapter(this);
xListView.setAdapter(mAdapter);
xListView.setPullLoadEnable(true);
xListView.setPullRefreshEnable(true);
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
mPage = 1;
initData(mPage);
}
@Override
public void onLoadMore() {
mPage = mPage + 1;
initData(mPage);
}
});
initData(mPage);
}
private void initData(final int mPage) {
NetUtils.getInstance().getRequest(String.format(urlStr, COUNT, mPage), NewsBean.class, new NetUtils.CallBack<NewsBean>() {
@Override
public void OnSuccess(NewsBean newsBean) {
if (mPage == 1){
mAdapter.setDatas(newsBean.getData());
}else {
mAdapter.addDatas(newsBean.getData());
}
//停止刷新加载
xListView.stopRefresh();
xListView.stopLoadMore();
if (newsBean.getData().size() < COUNT){
xListView.setPullLoadEnable(false);
}
}
});
}
}
ViewPager适配器
package com.bwie.myweek2;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
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.ArrayList;
import java.util.List;
public class XListAdapter extends BaseAdapter {
private List<NewsBean.DataBean> mData;
private Context mContext;
public XListAdapter(Context mContext) {
this.mContext = mContext;
mData = new ArrayList<>();
}
public void setDatas(List<NewsBean.DataBean> data) {
mData.clear();
if (data != null){
mData.addAll(data);
}
notifyDataSetChanged();
}
public void addDatas(List<NewsBean.DataBean> data) {
if (data != null){
mData.addAll(data);
}
notifyDataSetChanged();
}
//是否有数据
/* public boolean hasNews(){
return mData.size() > 0;
}*/
@Override
public int getCount() {
//return hasNews() ? mData.size()+1 :mData.size();
return mData.size();
}
@Override
public NewsBean.DataBean getItem(int position) {
//return mData.get(hasNews() ? position -1:position);
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
private final int COUNT_ITEM = 2;
private final int ODD_ITEM = 0;
private final int EVEN_ITEM = 1;
@Override
public int getViewTypeCount() {
return COUNT_ITEM;
}
@Override
public int getItemViewType(int position) {
return position %2== 0 ? ODD_ITEM : EVEN_ITEM;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mHolder;
if (convertView == null){
convertView = LayoutInflater.from(mContext).inflate(getItemViewType(position) == ODD_ITEM ? R.layout.odd_item : R.layout.even_item, parent, false);
mHolder = new ViewHolder(convertView);
}else {
mHolder = (ViewHolder) convertView.getTag();
}
mHolder.initData(getItem(position));
return convertView;
}
class ViewHolder{
TextView textView1, textView2;
ImageView imageView;
public ViewHolder(View itemView){
textView1 = itemView.findViewById(R.id.textView1);
textView2 = itemView.findViewById(R.id.textView2);
imageView = itemView.findViewById(R.id.imageView);
itemView.setTag(this);
}
public void initData(NewsBean.DataBean item) {
textView1.setText(item.getNews_title());
textView2.setText(item.getNews_summary());
if (imageView != null){
ImageLoader.getInstance().displayImage(item.getPic_url(), imageView);
}
}
}
}
NetUtils工具类
package com.bwie.myweek2;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import com.google.gson.Gson;
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.net.URLConnection;
public class NetUtils {
//单例
private static NetUtils instance;
private NetUtils(){
}
public static NetUtils getInstance(){
if (instance == null){
instance = new NetUtils();
}
return instance;
}
public interface CallBack<T>{
void OnSuccess(T t);
}
@SuppressLint("StaticFieldLeak")
public void getRequest(final String urlStr, final Class clazz, final CallBack callBack){
new AsyncTask<String, Void, Object>(){
@Override
protected Object doInBackground(String... strings) {
return getRequest(urlStr, clazz);
}
@Override
protected void onPostExecute(Object o) {
callBack.OnSuccess(o);
}
}.execute(urlStr);
}
public <T> T getRequest(String urlStr, Class clazz){
return (T) new Gson().fromJson(getRequest(urlStr), clazz);
}
//网络请求
public String getRequest(String urlStr){
String result = "";
try {
URL url = new URL(urlStr);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
if (urlConnection.getResponseCode() == 200){
result = stream2String(urlConnection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
private String stream2String(InputStream inputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
for (String temp = bufferedReader.readLine();temp != null; temp = bufferedReader.readLine()){
stringBuilder.append(temp);
}
return stringBuilder.toString();
}
}