根据图片多条目展示

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="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:id="@+id/pull_listview"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />
</android.support.constraint.ConstraintLayout>

2.多条目布局


2.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"
    android:padding="10dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <ImageView
        android:id="@+id/image1"
        android:layout_width="140dp"
        android:layout_height="120dp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />
    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintRight_toLeftOf="@id/image1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:text="title"
        android:maxLines="2"
        />
</android.support.constraint.ConstraintLayout>
2.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="wrap_content"
    android:padding="10dp"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:maxLines="2"
        />
    <ImageView
        android:id="@+id/image1"
        android:layout_width="140dp"
        android:layout_height="120dp"
        app:layout_constraintTop_toBottomOf="@id/title"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />
    <ImageView
        android:id="@+id/image2"
        android:layout_width="140dp"
        android:layout_height="120dp"
        app:layout_constraintTop_toBottomOf="@id/title"
       app:layout_constraintLeft_toRightOf="@id/image1"
        app:layout_constraintRight_toLeftOf="@id/image3"
        app:layout_constraintBottom_toBottomOf="parent"
        />
    <ImageView
        android:id="@+id/image3"
        android:layout_width="140dp"
        android:layout_height="120dp"
        app:layout_constraintTop_toBottomOf="@id/title"
       app:layout_constraintLeft_toRightOf="@id/image2"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        />
</android.support.constraint.ConstraintLayout>

3.主代码页面

package com.example.guoxinyu20181122.ui.fragment;

import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.example.guoxinyu20181122.R;
import com.example.guoxinyu20181122.Util.NetUtil;
import com.example.guoxinyu20181122.bean.NewBean;
import com.example.guoxinyu20181122.ui.adaper.HomeAdaper;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

public class HomeFragment extends BaseFragment {

    private PullToRefreshListView refreshListView;
    private HomeAdaper homeAdaper;
    private String url = "http://api.tianapi.com/military/?key=605fa0a929c8d8b116424df0510c6b2a&num=10";
    private int mpage;
    @Override
    protected void initData() {
        NetUtil.getIntance().getRequest(url, NewBean.class, new NetUtil.CallBack<NewBean>() {
            @Override
            public void onSuccess(NewBean o) {
                if(o==null || !o.isSuccess()){
                    Toast.makeText(getActivity(),"请求错误",Toast.LENGTH_SHORT).show();
                    refreshListView.onRefreshComplete();
                    return;
                }
                if(mpage == 1){
                    homeAdaper.setmData(o.getNewslist());
                }else{
                    homeAdaper.addmData(o.getNewslist());
                }
                mpage++;
                refreshListView.onRefreshComplete();
            }
        });
    }

    @Override
    protected void initView(View view) {
        mpage = 1;
        //获取资源id
        refreshListView = view.findViewById(R.id.pull_listview);
        //创建适配器
        homeAdaper = new HomeAdaper(getActivity());
        refreshListView.setAdapter(homeAdaper);
        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);
        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                    mpage = 1;
                    initData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                     initData();
            }
        });
    }

    @Override
    protected int getLayoutResId() {
        return R.layout.home_fragment;
    }
}

4.适配器

package com.example.guoxinyu20181122.ui.adaper;

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.example.guoxinyu20181122.R;
import com.example.guoxinyu20181122.bean.NewBean;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class HomeAdaper extends BaseAdapter {
    private List<NewBean.NewslistBean> mData;
    private Context mContext;

    public HomeAdaper(Context mContext) {
        this.mContext = mContext;
        mData = new ArrayList<>();
    }

    public void setmData(List<NewBean.NewslistBean> mData) {
        this.mData.clear();
        if (mData != null) {
            this.mData.addAll(mData);
        }
        notifyDataSetChanged();
    }

    public void addmData(List<NewBean.NewslistBean> mData) {
        if (mData != null) {
            this.mData.addAll(mData);
        }
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public NewBean.NewslistBean getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    private final int ITEM_COUNT = 2;

    @Override
    public int getViewTypeCount() {
        return ITEM_COUNT;
    }

    private final int IAMEG_ONE = 0;
    private final int IAMEG_THREE = 1;

    @Override
    public int getItemViewType(int position) {
        /*String picUrl = mData.get(position).getPicUrl();
        String picUr2 = mData.get(position).getPicUrl();
        if(picUrl!=null && picUr2!=null){
            return IAMEG_THREE;
        }else{
            return IAMEG_ONE;
        }*/
        return mData.get(position).hasMultiPic() ? IAMEG_THREE : IAMEG_ONE;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(
                    getItemViewType(position) == IAMEG_ONE ? R.layout.home_imageone_item : R.layout.home_imagethree_item
                    , parent, false);
            holder = new ViewHolder(convertView);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.bind(getItem(position));
        return convertView;
    }

    class ViewHolder {
        ImageView image, image1, image2, image3;
        TextView title;

        public ViewHolder(View convertView) {
            //image = convertView.findViewById(R.id.image);
            image1 = convertView.findViewById(R.id.image1);
            image2 = convertView.findViewById(R.id.image2);
            image3 = convertView.findViewById(R.id.image3);
            title = convertView.findViewById(R.id.title);
            convertView.setTag(this);
        }

        public void bind(NewBean.NewslistBean item) {
            title.setText(item.getTitle());
            //ImageLoader.getInstance().displayImage(item.getPicUrl(), image);
            ImageLoader.getInstance().displayImage(item.getPicUrl(), image1);
            if(image2 != null && image3 != null) {
                ImageLoader.getInstance().displayImage(item.getPicUrl(), image2);
                ImageLoader.getInstance().displayImage(item.getPicUrl(), image3);
            }
        }
    }
}

5.bean类

package com.example.guoxinyu20181122.bean;

import java.util.List;
import java.util.Random;

public class NewBean {


    private int code;
    private String msg;
    private List<NewslistBean> newslist;
    private final int SUCCESS_CODE=200;
    public boolean isSuccess(){
        return SUCCESS_CODE == code;
    }
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        ///////
        private String picUrl2;

        public String getPicUrl2() {
            return picUrl2;
        }

        public boolean hasMultiPic() {
            if(new Random().nextBoolean()) {
                picUrl2 = picUrl;
            }
            return picUrl != null && picUrl2 != null;
        }
    }
}

6.工具类

package com.example.guoxinyu20181122.Util;

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 intance;
    private Gson gson;
    public NetUtil() {
        gson = new Gson();
    }

    public static NetUtil getIntance() {
        if(intance == null){
            intance = new NetUtil();
        }
        return intance;
    }
    //执行网络请求返回string
    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);
            int responseCode = urlConnection.getResponseCode();
            if(responseCode == 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 builder = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        for (String tmp = br.readLine();tmp!=null;tmp = br.readLine()){
            builder.append(tmp);
        }
        return builder.toString();
    }
    public <E> E getRequest(String urlStr,Class clazz){
        return (E) gson.fromJson(getRequest(urlStr),clazz);
    }
    public interface CallBack<E>{
        void onSuccess(E e);
    }
    @SuppressLint("StaticFieldLeak")
    public void getRequest(String urlStr, final Class clazz, final CallBack callBack){
        new AsyncTask<String,Void,Object>(){
            @Override
            protected Object doInBackground(String... strings) {
                return getRequest(strings[0],clazz);
            }

            @Override
            protected void onPostExecute(Object o) {
                callBack.onSuccess(o);
            }
        }.execute(urlStr);
    }
}

7.Application初始化图片

package com.example.guoxinyu20181122.Application;

import android.app.Application;
import android.graphics.Bitmap;

import com.example.guoxinyu20181122.R;
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)
                .memoryCacheSizePercentage(10)
                .diskCacheSize(50*1024*1024)
                .defaultDisplayImageOptions(new DisplayImageOptions.Builder()
                        .bitmapConfig(Bitmap.Config.RGB_565)
                        .cacheOnDisk(true)
                        .cacheInMemory(true)
                        .showImageOnLoading(R.mipmap.ic_launcher)
                        .showImageOnFail(R.mipmap.ic_launcher)
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        .build())
                .build());
    }
}

猜你喜欢

转载自blog.csdn.net/guoxinyu1207/article/details/84366701