XRecyclerView

需要導入依賴

configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (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"
    >




    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal"

        android:id="@+id/LL"
        >


        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Image"
            android:src="@mipmap/ic_launcher"
            />

         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:id="@+id/Tv"
             android:text="暱稱"
            android:layout_toRightOf="@+id/Image"
             android:layout_marginLeft="20dp"
             />
        <Button
            android: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.XRecyclerView
        android: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;
    @Override
    public void getData(String url, MyCallBack callBack) {

        this.callBack=callBack;
        new MyTask().execute(url);
    }


    class MyTask extends AsyncTask<String,Void,MyData> {

        @Override
        protected 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;
        }

        @Override
        protected 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();
    }

    @Override
    public void starRequse(final String url) {
        model.getData(url, new MyCallBack() {
            @Override
            public void setData(Object user) {
                iView.success(user);
            }

            @Override
            public 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
    @Override
    public 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;
    }

    @Override
    public 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);


    }

    @Override
    public 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;
    }

    @Override
    public 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 {

    @Override
    public 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;

    @Override
    protected 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() {
            @Override
            public 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() {
            @Override
            public 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() {
            @Override
            public 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() {
    @Override
    public void onRefresh() {
        index=1;
        mLsit.clear();
        presenter.starRequse(mUrl+index);
    }

    @Override
    public 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());

    }


//成功回調
    @Override
    public void success(Object data) {

        MyData myData= (MyData) data;
                mLsit.addAll(myData.getData());
                adapter.notifyDataSetChanged();
                Recy.refreshComplete();
                Recy.loadMoreComplete();

    }

    @Override
    public void error(Object error) {

    }



    //登陸監聽
    UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授權開始的回調
         * @param platform 平臺名稱
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @desc 授權成功的回調
         * @param platform 平臺名稱
         * @param action 行爲序號,開發者用不上
         * @param data 用戶資料返回
         */
        @Override
        public 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 錯誤原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

            Toast.makeText(MainActivity.this, "失敗:" + t.getMessage(),                                     Toast.LENGTH_LONG).show();
        }

        /**
         * @desc 授權取消的回調
         * @param platform 平臺名稱
         * @param action 行爲序號,開發者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
    }



}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章