多条目+XListview+上拉+下拉

本文介绍了一个使用Fragment实现的数据加载与更新的示例,通过XListView组件进行数据的上拉加载和下拉刷新,利用AsyncTask进行异步数据请求,并通过自定义Adapter实现了列表项的展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mian主页
package com.example.weektwo;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.xlistviewlib.XListView;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;

public class Fragmentone extends Fragment implements XListView.IXListViewListener{

private XListView xlistview;
private String url="http://www.xieast.com/api/news/news.php?page=";
private List<Gson.DataBean> list=new ArrayList<>();
private int num=1;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragmentone,container,false);
    xlistview = view.findViewById(R.id.xlistview);
    initData(1);
    return  view;
}

private void initData(int num) {
    AsyncTask<String, Void, List<Gson.DataBean>> execute = new Utile().execute(url + num);
    try {
        List<Gson.DataBean> dataBeans = execute.get();
        //适配器
        MAdapter mAdapter = new MAdapter(getActivity(), list);
        list.addAll(dataBeans);
        xlistview.setAdapter(mAdapter);
        //上拉
        xlistview.setPullLoadEnable(true);
        //下拉
        xlistview.setPullRefreshEnable(true);
        //停止加载
        xlistview.stopLoadMore();
        //停止刷新
        xlistview.stopRefresh();
    } catch (ExecutionException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

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

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

}
mian主布局

<?xml version="1.0" encoding="utf-8"?>


<com.example.xlistviewlib.XListView
android:id="@+id/xlistview"
android:layout_width=“match_parent”
android:layout_height=“match_parent”></com.example.xlistviewlib.XListView>

**MAdapter** package com.example.weektwo;

import android.content.Context;
import android.graphics.Bitmap;
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.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;

import java.util.List;

public class MAdapter extends BaseAdapter {
private Context context;
private List<Gson.DataBean> list;
private ImageLoader imageLoader=ImageLoader.getInstance();
private final DisplayImageOptions build;
private final int ONE=0;
private final int TWO=1;

public MAdapter(Context context, List<Gson.DataBean> list) {
    this.context = context;
    this.list = list;
    build = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .showImageForEmptyUri(R.drawable.bga_banner_point_enabled)
            .displayer(new CircleBitmapDisplayer())
            .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) {
    if (position%2==0){
        return ONE;
    }else{
        return TWO;
    }
}

@Override
public int getViewTypeCount() {

    return 2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);
    if (type==ONE){
        Holder holder;
        if (convertView==null){
            holder=new Holder();
            convertView=LayoutInflater.from(context).inflate(R.layout.item_one,parent,false);
            holder.title =(TextView) convertView.findViewById(R.id.title);
            holder.image =(ImageView)convertView.findViewById(R.id.image);
            convertView.setTag(holder);
        }else{
            holder = (Holder) convertView.getTag();
        }
        holder.title.setText(list.get(position).getTitle());
        String pic_s = list.get(position).getThumbnail_pic_s();
        imageLoader.displayImage(pic_s,holder.image,build);
    }else{
        Holder2 holder2;
        if (convertView==null){
            holder2=new Holder2();
            convertView=LayoutInflater.from(context).inflate(R.layout.item_two,parent,false);
            holder2.titlel =(TextView) convertView.findViewById(R.id.titlel);
            holder2.image1 =(ImageView) convertView.findViewById(R.id.image1);
            holder2.image2 =(ImageView) convertView.findViewById(R.id.image2);
            holder2.image3 =(ImageView) convertView.findViewById(R.id.image3);
            convertView.setTag(holder2);
        }else{
            holder2 = (Holder2) convertView.getTag();
        }
        holder2.titlel.setText(list.get(position).getTitle());
        String thumbnail_pic_s = list.get(position).getThumbnail_pic_s();
        String thumbnail_pic_s02 = list.get(position).getThumbnail_pic_s02();
        String thumbnail_pic_s03 = list.get(position).getThumbnail_pic_s03();
        imageLoader.displayImage(thumbnail_pic_s,holder2.image1,build);
        imageLoader.displayImage(thumbnail_pic_s02,holder2.image2,build);
        imageLoader.displayImage(thumbnail_pic_s03,holder2.image3,build);
    }
            return convertView;
            }

class Holder{

ImageView image;
TextView title;

}
class Holder2{

ImageView image3;
ImageView image2;
ImageView image1;
TextView titlel;

}
}
Utile数据请求
package com.example.weektwo;

import android.os.AsyncTask;

import com.google.common.io.CharStreams;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

public class Utile extends AsyncTask<String,Void,List<Gson.DataBean>> {

private Gson gson;

@Override
protected List<Gson.DataBean> doInBackground(String... strings) {
    try {
        //获取地址
        URL url = new URL(strings[0]);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //方法
        urlConnection.setRequestMethod("GET");
        //连接超时
        urlConnection.setConnectTimeout(5000);
        //读取超时
        urlConnection.setReadTimeout(5000);
        //结果码
        int responseCode = urlConnection.getResponseCode();
        if (responseCode==200){
            String s = CharStreams.toString(new InputStreamReader(urlConnection.getInputStream()));
            gson = new com.google.gson.Gson().fromJson(s, Gson.class);
            return gson.getData();
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

}
one布局

<?xml version="1.0" encoding="utf-8"?>



***two布局*** <?xml version="1.0" encoding="utf-8"?>
<TextView
    android:id="@+id/titlel"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text=""/>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/image1"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/ic_launcher"/>
    <ImageView
        android:id="@+id/image2"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/ic_launcher"/>
    <ImageView
        android:id="@+id/image3"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:src="@mipmap/ic_launcher"/>
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值