需要导入依赖

configurations.all {resolutionStrategy.eachDependency { DependencyResolveDetails details ->def requested = details.requestedif (requested.group == 'com.android.support') {if (!requested.name.startsWith("multidex")) {details.useVersion '28.0.0'}}}}implementation 'com.jcodecraeer:xrecyclerview:1.5.9'

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"tools:context=".MainActivity"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="80dp"android:orientation="horizontal"android:id="@+id/LL"><ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/Image"android:src="@mipmap/ic_launcher"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/Tv"android:text="昵称"android:layout_toRightOf="@+id/Image"android:layout_marginLeft="20dp"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/San_Btn"android:text="登录"android:layout_alignParentRight="true"android:focusable="false"/></RelativeLayout><com.jcodecraeer.xrecyclerview.XRecyclerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/Recy_Lv"android:layout_below="@+id/LL"></com.jcodecraeer.xrecyclerview.XRecyclerView>
</RelativeLayout>

MVP布局

IView接口

package com.example.sanzhoumoni.view;public interface IView<T> {void success(T data);void error(T error);
}

Model接口

package com.example.sanzhoumoni.model;import com.example.sanzhoumoni.callback.MyCallBack;public interface Model {void getData(String url, MyCallBack callBack);}
package com.example.sanzhoumoni.model;import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;import com.example.sanzhoumoni.MainActivity;
import com.example.sanzhoumoni.bean.MyData;
import com.example.sanzhoumoni.callback.MyCallBack;
import com.example.sanzhoumoni.utils.OkHttpUtils;
import com.google.gson.Gson;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class ModelImpl implements Model {private MyCallBack callBack;@Overridepublic void getData(String url, MyCallBack callBack) {this.callBack=callBack;new MyTask().execute(url);}class MyTask extends AsyncTask<String,Void,MyData> {@Overrideprotected MyData doInBackground(String... strings) {try {String jsonStr = OkHttpUtils.getInstance().get(strings[0]);Gson gson=new Gson();MyData myData = gson.fromJson(jsonStr, MyData.class);Log.e("aaaa",myData.getMsg());return myData;} catch (IOException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(MyData myData) {super.onPostExecute(myData);callBack.setData(myData);}}
}

IPresenter接口

package com.example.sanzhoumoni.presenter;public interface IPresenter {void starRequse(String url);
}
package com.example.sanzhoumoni.presenter;import com.example.sanzhoumoni.callback.MyCallBack;
import com.example.sanzhoumoni.model.ModelImpl;
import com.example.sanzhoumoni.view.IView;public class PresenterImpl implements IPresenter {private ModelImpl model;private IView iView;public PresenterImpl(IView iView) {this.iView = iView;model=new ModelImpl();}@Overridepublic void starRequse(final String url) {model.getData(url, new MyCallBack() {@Overridepublic void setData(Object user) {iView.success(user);}@Overridepublic void setError(Object error) {iView.error(error);}});}}

MyCallBack接口

package com.example.sanzhoumoni.callback;public interface MyCallBack<T> {void setData(T user);void setError(T error);}

MyAdapter适配器

package com.example.sanzhoumoni.adapter;import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.example.sanzhoumoni.R;
import com.example.sanzhoumoni.bean.MyData;import java.util.ArrayList;
import java.util.Random;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> implements View.OnClickListener{private ArrayList<MyData.DataBean> mList;private Context mContext;public MyAdapter(ArrayList<MyData.DataBean> mList, Context mContext) {this.mList = mList;this.mContext = mContext;}@NonNull@Overridepublic MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {View view=  LayoutInflater.from(mContext).inflate(R.layout.beauty_item,viewGroup,false);ViewHolder holder=new ViewHolder(view);view.setOnClickListener(this);return holder;}@Overridepublic void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {MyData.DataBean dataBean= mList.get(i);ViewGroup.LayoutParams params= viewHolder.itemView.getLayoutParams();Random random=new Random();int height= random.nextInt(300)+300;params.height=height;viewHolder.itemView.setLayoutParams(params);viewHolder.textView.setText(dataBean.getAuthor_name());Glide.with(mContext).load(dataBean.getThumbnail_pic_s()).into(viewHolder.imageView);viewHolder.itemView.setTag(i);}@Overridepublic int getItemCount() {return mList.size();}public class ViewHolder extends RecyclerView.ViewHolder {private ImageView imageView;private  TextView textView;public ViewHolder(@NonNull View itemView) {super(itemView);textView= itemView.findViewById(R.id.Text_View);imageView=itemView.findViewById(R.id.Beauty_Image);}}public interface ItemClick{void setOnItem(View v,int position);}private ItemClick itemClick;public void setOnItemClick(ItemClick itemClick){this.itemClick=itemClick;}@Overridepublic void onClick(View v) {if(itemClick!=null){itemClick.setOnItem(v, (Integer) v.getTag());}}}

MyApp 第三方登录用的

package com.example.sanzhoumoni.app;import android.app.Application;import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;public class MyApp extends Application {@Overridepublic void onCreate() {super.onCreate();UMConfigure.init(this, "5a12384aa40fa3551f0001d1", "umeng", UMConfigure.DEVICE_TYPE_PHONE, "");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0//开启log打印 报错会给你提示UMConfigure.setLogEnabled(true);PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");//豆瓣RENREN平台目前只能在服务器端配置PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");PlatformConfig.setAlipay("2015111700822536");PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");PlatformConfig.setPinterest("1439206");PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");PlatformConfig.setDing("dingoalmlnohc0wggfedpk");PlatformConfig.setVKontakte("5764965", "5My6SNliAaLxEm3Lyd9J");PlatformConfig.setDropbox("oz8v5apet3arcdy", "h7p2pjbzkkxt02a");}
}

OkHttpUtils工具类

package com.example.sanzhoumoni.utils;import java.io.IOException;import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttpUtils {private OkHttpClient okHttpClient;private OkHttpUtils(){okHttpClient=new OkHttpClient();}public static OkHttpUtils getInstance(){return okHttpHolde.utils;}static class okHttpHolde{private static final OkHttpUtils utils=new OkHttpUtils();}public String get(String url) throws IOException {Request request=new Request.Builder().url(url).build() ;Response execute = okHttpClient.newCall(request).execute();return execute.body().string();}}

MainActivity主页面

package com.example.sanzhoumoni;import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import com.bumptech.glide.Glide;
import com.example.sanzhoumoni.adapter.MyAdapter;
import com.example.sanzhoumoni.bean.MyData;
import com.example.sanzhoumoni.presenter.PresenterImpl;
import com.example.sanzhoumoni.view.IView;import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareConfig;
import com.umeng.socialize.bean.SHARE_MEDIA;import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;public class MainActivity extends AppCompatActivity implements IView {private ImageView Image;private TextView Tv;private Button San_Btn;private XRecyclerView Recy;private String mUrl="http://www.xieast.com/api/news/news.php?page=";private ArrayList<MyData.DataBean> mLsit=new ArrayList<>();private MyAdapter adapter;private int index=1;private PresenterImpl presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();presenter = new PresenterImpl(this);adapter = new MyAdapter(mLsit,this);Recy.setAdapter(adapter);presenter.starRequse(mUrl+index);// Toast.makeText(this,mLsit.toString(),Toast.LENGTH_SHORT).show();Image.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {ObjectAnimator animator=ObjectAnimator.ofFloat(Image,"scaleX",4f,1f);ObjectAnimator alp=ObjectAnimator.ofFloat(Image,"alpha",1f,0f,1f);AnimatorSet animatorSet=new AnimatorSet();animatorSet.play(animator).with(alp);animatorSet.setDuration(5000);animatorSet.start();}});//条目点击属性动画adapter.setOnItemClick(new MyAdapter.ItemClick() {@Overridepublic void setOnItem(View v, int position) {Toast.makeText(MainActivity.this,mLsit.get(position).getAuthor_name(),Toast.LENGTH_SHORT).show();ObjectAnimator alp=ObjectAnimator.ofFloat(v,"alpha",1f,0f,1f);AnimatorSet animatorSet=new AnimatorSet();animatorSet.play(alp);animatorSet.setDuration(5000);animatorSet.start();}});//第三方登录San_Btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {UMShareConfig shareConfig = new UMShareConfig();shareConfig.isNeedAuthOnGetUserInfo(true);UMShareAPI.get(MainActivity.this).setShareConfig(shareConfig);UMShareAPI.get(MainActivity.this).getPlatformInfo(MainActivity.this, SHARE_MEDIA.QQ, authListener);}});//上拉加载/下拉刷新
Recy.setLoadingListener(new XRecyclerView.LoadingListener() {@Overridepublic void onRefresh() {index=1;mLsit.clear();presenter.starRequse(mUrl+index);}@Overridepublic void onLoadMore() {index++;presenter.starRequse(mUrl+index);}
});}private void initView() {Image = (ImageView) findViewById(R.id.Image);Tv = (TextView) findViewById(R.id.Tv);San_Btn = (Button) findViewById(R.id.San_Btn);// Recy = (RecyclerView) findViewById(R.id.Recy);Recy=  findViewById(R.id.Recy_Lv);//瀑布流布局StaggeredGridLayoutManager staggeredGridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);Recy.setLayoutManager(staggeredGridLayoutManager);Recy.setItemAnimator(new DefaultItemAnimator());}//成功回调@Overridepublic void success(Object data) {MyData myData= (MyData) data;mLsit.addAll(myData.getData());adapter.notifyDataSetChanged();Recy.refreshComplete();Recy.loadMoreComplete();}@Overridepublic void error(Object error) {}//登陆监听UMAuthListener authListener = new UMAuthListener() {/*** @desc 授权开始的回调* @param platform 平台名称*/@Overridepublic void onStart(SHARE_MEDIA platform) {}/*** @desc 授权成功的回调* @param platform 平台名称* @param action 行为序号,开发者用不上* @param data 用户资料返回*/@Overridepublic void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();String name = data.get("name");//String img =  data.get("profile_image_url");Tv.setText(name);//Log.e("aaaaaaaaaaaaa",data.toString());Glide.with(MainActivity.this).load(data.get("profile_image_url")).into(Image);}/*** @desc 授权失败的回调* @param platform 平台名称* @param action 行为序号,开发者用不上* @param t 错误原因*/@Overridepublic void onError(SHARE_MEDIA platform, int action, Throwable t) {Toast.makeText(MainActivity.this, "失败:" + t.getMessage(),                                     Toast.LENGTH_LONG).show();}/*** @desc 授权取消的回调* @param platform 平台名称* @param action 行为序号,开发者用不上*/@Overridepublic void onCancel(SHARE_MEDIA platform, int action) {Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();}};@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}}

XRecyclerView相关推荐

  1. mvc+xrecyclerview+SQL+自定义控件

    效果图 第二个页面 代码: 主页面 package com.example.yk_lx1;import android.animation.Animator; import android.anima ...

  2. XRecyclerView、Okhttp

    XRecyclerView 上拉加载.下滑刷新 依赖 bean类 布局文件 适配器代码 activity实现 上拉加载.下滑刷新 依赖 //XRecyclerViewapi('com.jcodecra ...

  3. XRecyclerView上下拉使用

    在Android的开发过程中数据的展示是非常普遍的,从一开始的LIstView到RecyclerView一直都是我们最长用到的控件,而这些列表的数据的不是固定死的,而且为了不让App加载数据的速度太慢 ...

  4. andriodjie——xRecyclerView网络获取数据简单实现

    1.配置build.gradle文件: 直接添加 compile 'com.jcodecraeer:xrecyclerview:1.3.2' 即可. 2.在xml文件的使用: <?xml ver ...

  5. XRecyclerView上下拉加载刷新

    1.配置build.gradle文件: 直接添加 compile 'com.jcodecraeer:xrecyclerview:1.3.2' 即可. 2.在xml文件的使用: <?xml ver ...

  6. mvp实现Xrecyclerview的上下拉和购物车功能(仿饿了么)

    首先先导入咱们的依赖 implementation 'com.android.support:design:28.0.0'implementation 'com.google.code.gson:gs ...

  7. TabLayout+ViewPager无限轮播加小圆点,XRecyclerView下拉刷新,加载更多

    效果图 要导入的依赖 compile files('libs/okhttp-3.9.0.jar')     compile files('libs/okio-1.13.0.jar')     comp ...

  8. 使用xrecyclerview+OK+Fresco加载图片实现商品列表

    首先导入依赖 compile 'com.jcodecraeer:xrecyclerview:1.3.2'compile 'com.google.code.gson:gson:2.7'compile ' ...

  9. mvp实现Xrecyclerview的上下拉和购物车功能(仿淘宝)

    首先先导入我们要使用的依赖 implementation 'com.android.support:design:28.0.0'implementation 'com.google.code.gson ...

  10. XRecyclerView 移除的踩坑之路(XRecyclerView 的bug?)

    最近因为需要上下拉的刷新的功能,又不想重复造轮子,小编特意去找了个第三方的开源lib, 现在第三方上下拉刷新的开源lib是非常之多啊,我就不介绍了,反正小编情有独钟的看上了XRecyclerView ...

最新文章

  1. C#线程从陌生到熟悉(4)
  2. java arraylist 源代码_Java中ArrayList源码浅析
  3. windows server 2003之七---DNS
  4. What is the expectation maximization algorithm?
  5. DWZ关闭navTab后刷新指定的navTab
  6. Spring获取前台参数的几种方式
  7. java旅客接口_GitHub - s1mplecc/checkin-scheduler: 使用 Java 实现的旅客人数分布预估与值机排班调度算法...
  8. 网页制作 网页下拉菜单HTML+CSS制作
  9. win10做文件服务器怎么精简,win10精简系统怎么做到
  10. ruoyi 项目启动步骤
  11. Android手机无法上网怎么办,为什么android手机已经连接WIFI还是不能上网?
  12. 最简洁用EXCEL公式实现身份证验证
  13. 小程序解决上拉加载更多时数据超过1024KB
  14. uni-app 中如何使用谷歌地图 !?
  15. error: C1083: 无法打开包括文件: “QString”: No such error: ‘QDir‘ file not found
  16. 毕业设计-ssm-气象雷达
  17. 微博在教育领域的应用
  18. Java日记_17.9.01——点击按钮后,键盘监听失效的原因与解决办法
  19. Closing non transactional SqlSession
  20. 为什么全球最好的大学大半在美国?看看美国的孩子是怎么念书的

热门文章

  1. 分享ASP.NET视频系列教程——第十九讲 ASP.NET内置的AJAX
  2. 老板让我通知领导们开会,有几个领导故意开会迟到,老板反而说我不会办事,怎么办?...
  3. 买服务器上国外网站,国外服务器怎么买?
  4. 怎么运行element ui
  5. 消防信号总线原理_消防联动工作原理
  6. ipa文件安装到ios系统
  7. 键盘连不上计算机,电脑键盘失灵的解决办法
  8. Python学习记录(小甲鱼C的课程)
  9. 图灵机和通用计算机,数学的不完美之美——阿兰?图灵与图灵机
  10. 怎么简单的生成SSL证书