请求数据《上方图片轮播,,下方PullToRefreshGridView》

本文介绍了一个结合使用ViewPager和PullToRefreshGridView的Android应用实例,展示了如何实现图片轮播及网格视图的下拉刷新和上拉加载更多功能,并通过自定义适配器实现了列表项的加载。

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

activity_main布局控件为:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"

   >

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="200px"></android.support.v4.view.ViewPager>
    <com.handmark.pulltorefresh.library.PullToRefreshGridView
        android:layout_width="match_parent"
        android:layout_height="600px"
        android:numColumns="2"
        android:id="@+id/pl"
        ></com.handmark.pulltorefresh.library.PullToRefreshGridView>

</LinearLayout>
mainActivity中:

package com.example.com.zhangjinlong226;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshGridView;
import com.nostra13.universalimageloader.core.DisplayImageOptions
;import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import java.util.ArrayList
;import java.util.List;
public class MainActivity extends AppCompatActivity {
private int page=1; private
List<Bean.DataBean> list; private List<String> pic;
private Handler handler=new Handler(){
@Override public void handleMessage(Message msg) {
super.handleMessage(msg);
int p=vp.getCurrentItem(); p++;
vp.setCurrentItem(p); sendEmptyMessageDelayed(0,1000); } };
private MyBas bas;
private DisplayImageOptions options;
private ViewPager vp;
private PullToRefreshGridView pl;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); vp = findViewById(R.id.vp);
pl = findViewById(R.id.pl);
Request();
Init();
options = new DisplayImageOptions.Builder() .cacheInMemory(true) .cacheOnDisk(true) .showImageOnLoading(R.mipmap.ic_launcher) .showImageForEmptyUri(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .bitmapConfig(Bitmap.Config.RGB_565) .imageScaleType(ImageScaleType.EXACTLY) .displayer(new RoundedBitmapDisplayer(100)) .build(); }
private void Request() {
MyTask task=new MyTask(new MyTask.IcallBack() {
@Override public void updateUiByjson(String string) {
Gson gson=new Gson();
Bean bean = gson.fromJson(string, Bean.class);
list = bean.getData();
pl.onRefreshComplete(); Base();
pic = new ArrayList<>();
for (int i = 0;i <list.size();i++){
String picUrl=list.get(i).getImg();
pic.add(picUrl); }
vp.setAdapter(new MyPage());
vp.setCurrentItem(5*10);
handler.sendEmptyMessageDelayed(0,1000); } });
task.execute("http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page=1"); }
private void Base() {
if (bas==null){
bas = new MyBas(list,MainActivity.this);
pl.setAdapter(bas); }else{ bas.notifyDataSetChanged(); } }
private void Init() {
pl.setMode(PullToRefreshGridView.Mode.BOTH);
pl.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() {
@Override public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) {
page=1; Request(); }
@Override public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) {page++;Request(); } }); } class MyPage extends PagerAdapter{
@Override public int getCount() { return Integer.MAX_VALUE; }
@Override public boolean isViewFromObject(View view, Object object) {
return view==object; }
@Override public Object instantiateItem(ViewGroup container, int position) {
ImageView iv=new ImageView(MainActivity.this);
String s=pic.get(position%pic.size());
ImageLoader.getInstance().displayImage(s,iv,options); container.addView(iv); return iv; }
@Override public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object); } }}
子布局:
<?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">
<ImageView
    android:layout_width="70px"
    android:layout_height="70px"
    android:id="@+id/img"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv"/>
</LinearLayout>
适配器中为:
package com.example.com.zhangjinlong226;

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 com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

import java.util.List;

/**
 * Created by john on 2018/2/26.
 */

public class MyBas extends BaseAdapter{
    private List<Bean.DataBean> list;
    private Context context;
    private final DisplayImageOptions options;

    public MyBas(List<Bean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
        options = new DisplayImageOptions.Builder()
                   .cacheInMemory(true)
                   .cacheOnDisk(true)
                   .showImageOnLoading(R.mipmap.ic_launcher)
                   .showImageForEmptyUri(R.mipmap.ic_launcher)
                   .showImageOnFail(R.mipmap.ic_launcher)
                   .bitmapConfig(Bitmap.Config.RGB_565)
                   .imageScaleType(ImageScaleType.EXACTLY)
                   .displayer(new RoundedBitmapDisplayer(100))
                   .build();
    }

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

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

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view=View.inflate(context,R.layout.list_item,null);
        ImageView img = view.findViewById(R.id.img);
        TextView tv = view.findViewById(R.id.tv);
        ImageLoader.getInstance().displayImage(list.get(i).getImg(),img,options);
        tv.setText(list.get(i).getIntroduction());
        return view;
    }
}
注:请求数据时用接口回调:
权限为:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.INTERNET"></uses-permission>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值