Activity中的代码:
判断是上拉还是加载
主要是通过page当前的一个页数来判断
//页数
mpage=1;
xListView = findViewById(R.id.xlistview);
//支持刷新
xListView.setPullRefreshEnable(true);
//支持加载
xListView.setPullLoadEnable(true);
mybase=new Mybase(this);
xListView.setAdapter(mybase);
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {//刷新
mpage=1;
jiazai();
}
@Override
public void onLoadMore() {//加载
mpage++;
jiazai();
}
});
jiazai();
}
public void jiazai(){
if(mpage==1){
huoqubanner();
huoqunews();
}else{
huoqunews();
}
}
//加载banner
public void huoqubanner(){
NetUtil.yibu(banner, BannerBean.class, new NetUtil.CallBack<BannerBean>() {
@Override
public void getdata(BannerBean o) {
if (mpage==1){
mybase.setBlist(o.getData());
}
}
});
}
public void huoqunews(){
NetUtil.yibu(news, NewsBean.class, new NetUtil.CallBack<NewsBean>() {
@Override
public void getdata(NewsBean o) {
if (mpage==1){
mybase.setNlist(o.getData());
}else{
mybase.addNlist(o.getData());
}
//停止刷新加载
xListView.stopRefresh();
xListView.stopLoadMore();
//如果加载的新闻少于十条就不加载
if (o.getData().size()<10){
xListView.setPullLoadEnable(false);
}
}
});
}
适配器中的代码:
主要是添加更新和加载的方法 进行更新适配器
多条目通过返回的type来判断布局的不同加载情况
private List<BannerBean.Data> blist;
private List<NewsBean.Result> nlist;
private Context context;
private final int ITEM_COUNT=2;
private final int ITEM_BANNER=0;
private final int ITEM_NEWS=1;
public Mybase(Context context) {
this.context = context;
blist=new ArrayList<>();
nlist=new ArrayList<>();
}
//更新banner
public void setBlist(List<BannerBean.Data> list) {
blist.clear();
if (list!=null){
blist.addAll(list);
}
notifyDataSetChanged();
}
//更新新闻数据
public void setNlist(List<NewsBean.Result> list) {
nlist.clear();
if (list!=null){
nlist.addAll(list);
}
notifyDataSetChanged();;
}
//加载更多的新闻数据
public void addNlist(List<NewsBean.Result> list) {
if (list!=null){
nlist.addAll(list);
}
notifyDataSetChanged();
}
//判断是否有banner
public boolean hasBanner(){
return blist.size()>0;
}
@Override
public int getCount() {
return hasBanner()?nlist.size()+1:nlist.size();
}
@Override
public NewsBean.Result getItem(int position) {
return nlist.get(hasBanner()?position-1:position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return ITEM_COUNT;
}
@Override
public int getItemViewType(int position) {
return position==0&&hasBanner()?ITEM_BANNER:ITEM_NEWS;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (getItemViewType(position)==ITEM_BANNER){
BannerViewHolder holder;
if (convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.item_banner,parent,false);
holder=new BannerViewHolder(convertView);
}else{
holder= (BannerViewHolder) convertView.getTag();
}
holder.getdata(context,blist);
}else{
NewsViewHolder holder;
if (convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.item_news,parent,false);
holder=new NewsViewHolder(convertView);
}else{
holder= (NewsViewHolder) convertView.getTag();
}
holder.getdata(getItem(position));
}
return convertView;
}
class BannerViewHolder{
private ViewPager viewPager;
@SuppressLint("HandlerLeak")
private android.os.Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
handler.sendEmptyMessageDelayed(0,2000);
}
};
public BannerViewHolder(View convertView) {
viewPager=convertView.findViewById(R.id.viewpager);
convertView.setTag(this);
}
public void getdata(Context context, List<BannerBean.Data> blist) {
//先取消掉切换任务
handler.removeCallbacksAndMessages(null);
viewPager.setAdapter(new Mypage(blist,context));
//默认位置
viewPager.setCurrentItem(viewPager.getAdapter().getCount()/2);
//开始轮播
handler.sendEmptyMessageDelayed(0,2000);
}
}
class NewsViewHolder{
private TextView title;
private TextView message;
private ImageView image;
public NewsViewHolder(View convertView) {
title=convertView.findViewById(R.id.title);
message=convertView.findViewById(R.id.message);
image=convertView.findViewById(R.id.image);
convertView.setTag(this);
}
public void getdata(NewsBean.Result item) {
title.setText(item.getNews_title());
message.setText(item.getNews_summary());
ImageLoader.getInstance().displayImage(item.getPic_url(),image);
}
}