android多条目加载

本文介绍如何使用XListView实现列表的下拉刷新和上拉加载更多功能,并通过自定义Adapter来展示不同类型的列表项,包括纯文本项和包含图片的项。此外,还介绍了如何使用ImageLoader进行图片加载。
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {

    private XListView xlv;
    private MyAdapter adapter;
    private ArrayList<Data.DataBean.ArticleListBean> list;
    private String urlPath = "http://zkread.com/htnewsroom/v2.0/mobileapp/user-0/categories/articles?itemType=recommendation&itemName=%25E6%258E%25A8%25E8%258D%2590&itemId=-1&size=20&firstId=1338557&page=";
    private int page=1;
    private Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Gson gson =new Gson();
            Data data = gson.fromJson(msg.obj.toString(), Data.class);
            list.addAll(data.getData().getArticleList());
            adapter.notifyDataSetChanged();

            stopXList();

        }
    };

    private void stopXList() {
        xlv.stopRefresh();
        xlv.stopLoadMore();
        xlv.setRefreshTime("刚刚");
    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
       initData();
    }

    private void initData() {
        new Thread(){
            @Override
            public void run() {

                String result = Utils.parmrs(urlPath + page);
                Message msg = Message.obtain();
                msg.what=1;
                msg.obj=result;
                handler.sendMessage(msg);

            }
        }.start();
    }

    private void initView() {

        xlv = (XListView) findViewById(R.id.xlv);
        xlv.setPullLoadEnable(true);
        xlv.setXListViewListener(this);
        list = new ArrayList<>();
        adapter=new MyAdapter(this,list);
        xlv.setAdapter(adapter);

    }

    @Override
    public void onRefresh() {
        page=1;
        list.clear();
        initData();

    }

    @Override
    public void onLoadMore() {
        page++;
   initData();
    }
}








public class MyAdapter extends BaseAdapter{
    private Context context;
    private List<Data.DataBean.ArticleListBean> list;
    ImageLoader imageloader;
    DisplayImageOptions options;

    private final int TYPE0 = 0;
    private final int TYPE1 = 1;

    public MyAdapter(Context context, List<Data.DataBean.ArticleListBean> list) {
        this.context = context;
        this.list = list;

        //创建默认的ImageLoader配置参数
        ImageLoaderConfiguration configuration = ImageLoaderConfiguration
                .createDefault(context);

        //将configuration配置到imageloader中
        imageloader=ImageLoader.getInstance();
        imageloader.init(configuration);

        options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                .showImageOnLoading(R.mipmap.ic_launcher)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .showImageOnFail(R.mipmap.ic_launcher)
                .build();
    }

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

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

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

    @Override
    public int getItemViewType(int position) {
//        Log.e("getItemViewType", "getItemViewType: "+position);
//        switch (position){
//            case TYPE0:
//                return TYPE0;
//            case TYPE1:
//                return TYPE1;
//            default:
//                return TYPE1;
//        }
        return list.get(position).getImgSrc().startsWith("http")?TYPE1:TYPE0;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        Log.e("getView", "getView: "+position);
        int type = getItemViewType(position);
        if(convertView==null){
            holder=new ViewHolder();

            if(type==TYPE0){
                convertView=View.inflate(context,R.layout.item0,null);
            }else if(type==TYPE1){
                convertView=View.inflate(context,R.layout.item,null);
                holder.image = (ImageView)convertView.findViewById(R.id.image);
            }

            holder.title= (TextView) convertView.findViewById(R.id.title);
            holder.site= (TextView) convertView.findViewById(R.id.site);
            holder.time= (TextView) convertView.findViewById(R.id.time);

            convertView.setTag(holder);
        }else{
            holder= (ViewHolder) convertView.getTag();
        }

        Data.DataBean.ArticleListBean bean = list.get(position);
        holder.title.setText(bean.getTitle());
        holder.site.setText(bean.getSite());
        holder.time.setText(longData2Str(bean.getCreateTime()));


        if(type==TYPE1){
            imageloader.displayImage(bean.getImgSrc(),holder.image,options);
        }

        return convertView;
    }

    class ViewHolder{
        TextView title,site,time;
        ImageView image;
    }


    public  String longData2Str(long time){
        Date date=new Date(time);
        SimpleDateFormat format=new SimpleDateFormat("HH:mm");
        return  format.format(date);
    }



}




xml布局文件 item0

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
                android:paddingLeft="5dp"
                android:paddingRight="5dp"
                android:paddingTop="3dp"
                android:paddingBottom="3dp">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:textSize="16sp"
        android:textStyle="bold"
        android:textColor="#3c4c5d"
        android:layout_height="60dp"/>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/site"
            android:textSize="14sp"
            android:textColor="#c3c3c3"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
        <TextView
            android:id="@+id/time"
            android:textSize="14sp"
            android:textColor="#c3c3c3"
            android:layout_alignParentRight="true"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"/>
    </RelativeLayout>

</LinearLayout>


布局文件 item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal">
    <LinearLayout android:layout_width="0dp"
                  android:layout_weight="1"
                  android:layout_height="match_parent"
                  android:orientation="vertical"
                  android:paddingLeft="5dp"
                  android:paddingRight="5dp"
                  android:paddingTop="3dp"
                  android:paddingBottom="3dp">
        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:textSize="16sp"
            android:textStyle="bold"
            android:textColor="#3c4c5d"
            android:layout_height="60dp"/>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/site"
                android:textSize="14sp"
                android:textColor="#c3c3c3"
                android:layout_alignParentLeft="true"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"/>
            <TextView
                android:id="@+id/time"
                android:textSize="14sp"
                android:textColor="#c3c3c3"
                android:layout_alignParentRight="true"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"/>
        </RelativeLayout>

    </LinearLayout>

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"/>


</LinearLayout>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值