您的位置:首页 > 其它

listview的多条目加载和解析

2017-10-12 20:02 295 查看
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: