效果图
主界面布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<me.maxwin.view.XListView
android:id="@+id/xListView1"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
子布局1
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="50dp" />
</android.support.constraint.ConstraintLayout>
子布局2
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f00">
<TextView
android:id="@+id/text22"
android:layout_width="match_parent"
android:layout_height="50dp" />
</android.support.constraint.ConstraintLayout>
主函数界面
package com.example.day;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import me.maxwin.view.XListView;
public class MainActivity extends AppCompatActivity {
private XListView listView;
private MyBaseAdapter adapter;
private int i =1;
private String url="http://api.expoon.com/AppNews/getNewsList/type/1/p";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.xListView1);
adapter = new MyBaseAdapter(this);
listView.setAdapter(adapter);
listView.setPullLoadEnable(true);
listView.setPullRefreshEnable(true);
listView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
i=1;
initData();
}
@Override
public void onLoadMore() {
initData();
}
});
initData();
}
private void initData() {
NewUitl.getNewUitl().getRquset(url+i, Bean.class, new NewUitl.CallBak<Bean>() {
@Override
public void onsuccess(Bean bean) {
if (i==1){
adapter.setList(bean.getData());
}else {
adapter.addList(bean.getData());
}
listView.stopLoadMore();
listView.stopRefresh();
i++;
}
});
}
}
适配器
package com.example.day;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MyBaseAdapter extends BaseAdapter {
private List<Bean.DataBean> list;
private Context context;
public MyBaseAdapter(Context context) {
this.context = context;
list= new ArrayList<>();
}
public void setList(List<Bean.DataBean> list1) {
list.clear();
list.addAll(list1);
notifyDataSetChanged();
}
public void addList(List<Bean.DataBean> list1) {
list.addAll(list1);
notifyDataSetChanged();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
return position % 2;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Bean.DataBean getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position)==0){
TextViewHolder holder;
if (convertView==null){
convertView= LayoutInflater.from(context).inflate(R.layout.iten01,parent,false);
holder = new TextViewHolder(convertView);
}else {
holder= (TextViewHolder) convertView.getTag();
}
holder.setData1(getItem(position));
}else {
ImageViewHolder holder11;
if (convertView==null){
convertView= LayoutInflater.from(context).inflate(R.layout.iten02,parent,false);
holder11 = new ImageViewHolder(convertView);
}else {
holder11= (ImageViewHolder) convertView.getTag();
}
holder11.setData2(getItem(position));
}
return convertView;
}
class TextViewHolder{
TextView text;
public TextViewHolder(View convertView) {
text=convertView.findViewById(R.id.text1);
convertView.setTag(this);
}
public void setData1(Bean.DataBean item) {
text.setText(item.getNews_title());
}
}
class ImageViewHolder{
TextView textView;
public ImageViewHolder(View convertView1) {
textView= convertView1.findViewById(R.id.text22);
convertView1.setTag(this);
}
public void setData2(Bean.DataBean item) {
textView.setText(item.getNews_title());
}
}
}
网络请求数据
package com.example.day;
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.URL;
public class NewUitl {
private static NewUitl newUitl;
private NewUitl(){
}
public static NewUitl getNewUitl(){
if (newUitl==null){
newUitl = new NewUitl();
}
return newUitl;
}
public interface CallBak<T>{
void onsuccess(T t);
}
public void getRquset(String s, final Class clazz, final CallBak callBak){
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return getRquset(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
callBak.onsuccess(o);
}
}.execute(s);
}
public <T>T getRquset(String string, Class clazz) {
return (T) new Gson().fromJson(getRquset(string),Bean.class);
}
public String getRquset(String string) {
try {
URL url= new URL(string);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(3000);
urlConnection.setConnectTimeout(3000);
if (urlConnection.getResponseCode()==200){
String s = Stream2String(urlConnection.getInputStream());
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String Stream2String(InputStream inputStream) throws IOException {
StringBuilder sb= new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
for (String tmp = br.readLine(); tmp !=null ; tmp=br.readLine()) {
sb.append(tmp);
}
return sb.toString();
}
}
bean类
package com.example.day;
import java.util.List;
public class Bean {
private int status;
private String info;
private List<DataBean> data;
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private String news_id;
private String news_title;
private String news_summary;
private String pic_url;
public String getNews_id() {
return news_id;
}
public void setNews_id(String news_id) {
this.news_id = news_id;
}
public String getNews_title() {
return news_title;
}
public void setNews_title(String news_title) {
this.news_title = news_title;
}
public String getNews_summary() {
return news_summary;
}
public void setNews_summary(String news_summary) {
this.news_summary = news_summary;
}
public String getPic_url() {
return pic_url;
}
public void setPic_url(String pic_url) {
this.pic_url = pic_url;
}
}
}
切记在清单文件中进行注册 网络需要权限