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>