listview的多条目加载和解析

来源:互联网 发布:java 通配符 编辑:程序博客网 时间:2024/05/12 20:47
package animtest.com.example.e531.listview_requestdata;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;

import com.google.gson.Gson;

import java.util.List;

import animtest.com.example.e531.listview_requestdata.Utils.MyTask;

public class MainActivity extends AppCompatActivity {
    private ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView)findViewById(R.id.lv);

        //构造MyTask对象,需要传入接口对象
        MyTask myTask=new MyTask(new MyTask.Icallbacks() {
            @Override
            public void updateUiByjson(String jsonstr) {
                //进行解析
                Gson gson=new Gson();
                DataDataBean result=gson.fromJson(jsonstr,DataDataBean.class);
                //得到要显示的数据源
                List<DataDataBean.ResultBean.ListBean> datas= result.getResult().getList();

                lv.setAdapter(new MyAdapter(MainActivity.this,datas));




            }
        });
        myTask.execute("http://v.juhe.cn/weixin/query?key=88f7bbc507e3ecacfaeab2b47dd8936f&ps=30");
    }
}










适配器方法
package animtest.com.example.e531.listview_requestdata;

import android.content.Context;
import android.graphics.Bitmap;
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 java.util.List;

/**
 * Created by e531 on 2017/10/12.
 */
public class MyAdapter extends BaseAdapter {

    private Context context;
    private List<DataDataBean.ResultBean.ListBean> datas;


    private int TYTLE_ONLY = 0;//只有文字的形式
    private int IMAGE_LEFT = 1;//表示图片在左边,文字在右边
    private int IMAGE_RIGHT = 2;//表示图片在右边,文字在左边
    private int IMAGE_BOTTOM = 3;//表示文字在上边,图片在下面


    private DisplayImageOptions options;

    public MyAdapter(Context context, List<DataDataBean.ResultBean.ListBean> datas) {
        this.context = context;
        this.datas = datas;

        options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(true)//使用磁盘缓存
                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式
                .build();
    }


    @Override
    public int getItemViewType(int position) {
        if(position%4==0){
            return TYTLE_ONLY;
        }else if(position%4==1){
            return IMAGE_LEFT;
        }else if(position%4==2){
            return IMAGE_RIGHT;
        }

        return IMAGE_BOTTOM;
    }

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

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

    @Override
    public Object getItem(int position) {
        return datas.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        //首先要判断视图要显示的类型
        int type=getItemViewType(position);
        if(type==TYTLE_ONLY){
            ViewHolder holder;
            if(convertView==null){
                convertView=View.inflate(context,R.layout.item_title_layout,null);
                holder=new ViewHolder();
                holder.tvTitle=(TextView) convertView.findViewById(R.id.text_title);
                convertView.setTag(holder);
            }else{
                holder=(ViewHolder) convertView.getTag();
            }
            holder.tvTitle.setText(datas.get(position).getTitle());

        }else if(type==IMAGE_LEFT){
            ViewHolderLeft holder;
            if(convertView==null){
                convertView=View.inflate(context,R.layout.item_left_layout,null);
                holder=new ViewHolderLeft();
                holder.tvTitle=(TextView) convertView.findViewById(R.id.text_title);
                holder.imageView= (ImageView) convertView.findViewById(R.id.image_view);
                convertView.setTag(holder);
            }else{
                holder=(ViewHolderLeft) convertView.getTag();
            }

            holder.tvTitle.setText(datas.get(position).getTitle());

            //异步请求图片
            ImageLoader.getInstance().displayImage(datas.get(position).getFirstImg(),holder.imageView,options);

        }else if(type==IMAGE_RIGHT){
            ViewHolderRight holder;
            if(convertView==null){
                convertView=View.inflate(context,R.layout.item_right_layout,null);
                holder=new ViewHolderRight();
                holder.tvTitle=(TextView) convertView.findViewById(R.id.text_title);
                holder.imageView= (ImageView) convertView.findViewById(R.id.image_view);
                convertView.setTag(holder);
            }else{
                holder=(ViewHolderRight) convertView.getTag();
            }

            holder.tvTitle.setText(datas.get(position).getTitle());

            //异步请求图片
            ImageLoader.getInstance().displayImage(datas.get(position).getFirstImg(),holder.imageView,options);

        }else{
            ViewHolderBottom holder;
            if(convertView==null){
                convertView=View.inflate(context,R.layout.item_bottom_layout,null);
                holder=new ViewHolderBottom();
                holder.tvTitle=(TextView) convertView.findViewById(R.id.text_title);
                holder.imageView= (ImageView) convertView.findViewById(R.id.image_view);
                convertView.setTag(holder);
            }else{
                holder=(ViewHolderBottom) convertView.getTag();
            }

            holder.tvTitle.setText(datas.get(position).getTitle());

            //异步请求图片
            ImageLoader.getInstance().displayImage(datas.get(position).getFirstImg(),holder.imageView,options);
        }



        return convertView;
    }

    class  ViewHolder{
        TextView tvTitle;
    }
    class ViewHolderLeft{
        TextView tvTitle;
        ImageView imageView;
    }
    class ViewHolderRight{
        TextView tvTitle;
        ImageView imageView;
    }
    class ViewHolderBottom{
        TextView tvTitle;
        ImageView imageView;
    }

}





布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:padding="10dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/text_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="200dp" />

</LinearLayout>





原创粉丝点击