XRecyclerView
需要导入依赖
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相关推荐
- mvc+xrecyclerview+SQL+自定义控件
效果图 第二个页面 代码: 主页面 package com.example.yk_lx1;import android.animation.Animator; import android.anima ...
- XRecyclerView、Okhttp
XRecyclerView 上拉加载.下滑刷新 依赖 bean类 布局文件 适配器代码 activity实现 上拉加载.下滑刷新 依赖 //XRecyclerViewapi('com.jcodecra ...
- XRecyclerView上下拉使用
在Android的开发过程中数据的展示是非常普遍的,从一开始的LIstView到RecyclerView一直都是我们最长用到的控件,而这些列表的数据的不是固定死的,而且为了不让App加载数据的速度太慢 ...
- andriodjie——xRecyclerView网络获取数据简单实现
1.配置build.gradle文件: 直接添加 compile 'com.jcodecraeer:xrecyclerview:1.3.2' 即可. 2.在xml文件的使用: <?xml ver ...
- XRecyclerView上下拉加载刷新
1.配置build.gradle文件: 直接添加 compile 'com.jcodecraeer:xrecyclerview:1.3.2' 即可. 2.在xml文件的使用: <?xml ver ...
- mvp实现Xrecyclerview的上下拉和购物车功能(仿饿了么)
首先先导入咱们的依赖 implementation 'com.android.support:design:28.0.0'implementation 'com.google.code.gson:gs ...
- TabLayout+ViewPager无限轮播加小圆点,XRecyclerView下拉刷新,加载更多
效果图 要导入的依赖 compile files('libs/okhttp-3.9.0.jar') compile files('libs/okio-1.13.0.jar') comp ...
- 使用xrecyclerview+OK+Fresco加载图片实现商品列表
首先导入依赖 compile 'com.jcodecraeer:xrecyclerview:1.3.2'compile 'com.google.code.gson:gson:2.7'compile ' ...
- mvp实现Xrecyclerview的上下拉和购物车功能(仿淘宝)
首先先导入我们要使用的依赖 implementation 'com.android.support:design:28.0.0'implementation 'com.google.code.gson ...
- XRecyclerView 移除的踩坑之路(XRecyclerView 的bug?)
最近因为需要上下拉的刷新的功能,又不想重复造轮子,小编特意去找了个第三方的开源lib, 现在第三方上下拉刷新的开源lib是非常之多啊,我就不介绍了,反正小编情有独钟的看上了XRecyclerView ...
最新文章
- C#线程从陌生到熟悉(4)
- java arraylist 源代码_Java中ArrayList源码浅析
- windows server 2003之七---DNS
- What is the expectation maximization algorithm?
- DWZ关闭navTab后刷新指定的navTab
- Spring获取前台参数的几种方式
- java旅客接口_GitHub - s1mplecc/checkin-scheduler: 使用 Java 实现的旅客人数分布预估与值机排班调度算法...
- 网页制作 网页下拉菜单HTML+CSS制作
- win10做文件服务器怎么精简,win10精简系统怎么做到
- ruoyi 项目启动步骤
- Android手机无法上网怎么办,为什么android手机已经连接WIFI还是不能上网?
- 最简洁用EXCEL公式实现身份证验证
- 小程序解决上拉加载更多时数据超过1024KB
- uni-app 中如何使用谷歌地图 !?
- error: C1083: 无法打开包括文件: “QString”: No such error: ‘QDir‘ file not found
- 毕业设计-ssm-气象雷达
- 微博在教育领域的应用
- Java日记_17.9.01——点击按钮后,键盘监听失效的原因与解决办法
- Closing non transactional SqlSession
- 为什么全球最好的大学大半在美国?看看美国的孩子是怎么念书的