MainActivity
package com.example.xlistviewweek2;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.example.xlistview.me.maxwin.view.XListView;
public class MainActivity extends AppCompatActivity {
private NewsAdapter mAdapter;
private int mPage = 1;
private XListView xListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xListView = findViewById(R.id.listview);
mAdapter = new NewsAdapter(this);
xListView.setAdapter(mAdapter);
xListView.setPullRefreshEnable(true);
xListView.setPullLoadEnable(true);
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
mPage = 1;
initData();
}
@Override
public void onLoadMore() {
mPage++;
initData();
}
});
initData();
}
private void initData() {
NetUtil.getInstance().getRequest("http://api.expoon.com/AppNews/getNewsList/type/1/p/1", NewsBean.class, new NetUtil.CallBack<NewsBean>() {
@Override
public void OnSuccess(NewsBean newsBean) {
if (mPage == 1){
mAdapter.setDatas(newsBean.getData());
}else {
mAdapter.addDatas(newsBean.getData());
}
xListView.stopRefresh();
xListView.stopLoadMore();
}
});
}
}
Adapter适配器
package com.example.xlistviewweek2;
import android.content.Context;
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.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import java.util.ArrayList;
import java.util.List;
class NewsAdapter extends BaseAdapter {
private List<NewsBean.DataBean> mlist;
private Context mContext;
public NewsAdapter(Context mContext) {
this.mContext = mContext;
mlist = new ArrayList<>();
}
public void setDatas(List<NewsBean.DataBean> data) {
mlist.clear();
if (data != null){
mlist.addAll(data);
}
notifyDataSetChanged();
}
public void addDatas(List<NewsBean.DataBean> data) {
if (data != null){
mlist.addAll(data);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public NewsBean.DataBean getItem(int position) {
return mlist.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder mHolder;
if (convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.left_item, parent, false);
mHolder = new ViewHolder();
mHolder.textView1 = convertView.findViewById(R.id.text1);
mHolder.textView2 = convertView.findViewById(R.id.text2);
mHolder.imageView = convertView.findViewById(R.id.image);
convertView.setTag(mHolder);
}else {
mHolder = (ViewHolder) convertView.getTag();
}
mHolder.textView1.setText(getItem(position).getNews_title());
mHolder.textView2.setText(getItem(position).getNews_summary());
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.displayer(new RoundedBitmapDisplayer(20))
.build();
ImageLoader.getInstance().displayImage(getItem(position).getPic_url(), mHolder.imageView, options);
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView textView1, textView2;
}
}
NetUtil解析工具类
package com.example.xlistviewweek2;
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 NetUtil {
private static NetUtil instance;
private NetUtil(){
}
public static NetUtil getInstance(){
if (instance == null){
instance = new NetUtil();
}
return instance;
}
//接口
public interface CallBack<T>{
void OnSuccess(T t);
}
//qing返回数据
@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);
}
//返回bean
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;
}
public 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();
}
}
App预加载
package com.example.xlistviewweek2;
import android.app.Application;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoader.getInstance().init(new ImageLoaderConfiguration.Builder(this)
.diskCacheSize(50*1024*1024)
.memoryCacheSizePercentage(12)
.defaultDisplayImageOptions(new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.build()
)
.build()
);
}
}