用MVP实现RecycleView多条目加载

 

1.工具类

package com.example.utils;

import android.util.Log;

import java.io.IOException;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by 。 on 2018/12/14.
 */

public class HttpUtils {
    private static final String TAG = "HttpUtils";
    private static HttpUtils httpUtils = new HttpUtils();
    private HttpUtils(){

    }
    public static HttpUtils getHttpUtils(){
        if(httpUtils==null){
            httpUtils = new HttpUtils();
        }
        return httpUtils;
    }
    public String getString(String url){
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder().url(url).get().build();
        try {
            Response response = okHttpClient.newCall(request).execute();
           // Log.d(TAG, "getString: 1111"+response.body().string());
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

2.Model层

package com.example.model;

import android.util.Log;

import com.example.bean.Result;
import com.example.bean.User;
import com.example.utils.HttpUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

/**
 * Created by 。 on 2018/12/14.
 */

public class MyModel {
    private static final String TAG = "MyModel";
    public Result getData(String page){
        String urll="http://www.xieast.com/api/news/news.php?page="+page;
        HttpUtils httpUtils = HttpUtils.getHttpUtils();
        String data = httpUtils.getString(urll);
        Gson gson = new Gson();
        Type type = new TypeToken<Result<List<User>>>() {}.getType();
        Result result = gson.fromJson(data, type);
        Log.d(TAG, "getData: 11111111"+result.toString());
        return result;
    }
}

3.Presenter层父类

package com.example.presenter;

import android.os.AsyncTask;

import com.example.bean.Result;
import com.example.core.BaseCall;

/**
 * Created by 。 on 2018/12/14.
 */

public abstract class BasePresenter {
    public BaseCall baseCall;
    public BasePresenter(BaseCall baseCall){
        this.baseCall = baseCall;
    }
    public void unbindBaseCall(){
        baseCall = null;
    }
    public void getdata(String...args){
        new MyTask().execute(args);
    }
    class MyTask extends AsyncTask<String,Void,Result>{

        @Override
        protected Result doInBackground(String... strings) {
            Result result = getAD(strings);
            return result;
        }

        @Override
        protected void onPostExecute(Result result) {
            super.onPostExecute(result);
            if(result.getCode().equals("1")){
                baseCall.loadSuccess(result.getData());
            }else{
                baseCall.loadError(result);
            }
        }
    }
    protected abstract Result getAD(String...args);
}

子类

package com.example.presenter;

import com.example.bean.Result;
import com.example.core.BaseCall;
import com.example.model.MyModel;

/**
 * Created by 。 on 2018/12/14.
 */

    public class MyPresenter extends BasePresenter {
        public MyPresenter(BaseCall baseCall) {
            super(baseCall);
        }

    @Override
    protected Result getAD(String... args) {
        Result result = new MyModel().getData(args[0]);
        return result;
    }
}

4.MainActivity

public class MainActivity extends AppCompatActivity implements BaseCall {
            //使用黄油刀
            @BindView(R.id.image_view)
            CircleImageView imageView;
            @BindView(R.id.text_view)
            TextView textView;
            @BindView(R.id.btn_login)
            Button btnLogin;
            private static final String TAG = "MainActivity";
            @BindView(R.id.recy_view)
            RecyclerView recyView;
            @BindView(R.id.pull_view)
            PullToRefreshScrollView pullView;
            private int page = 1;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                ButterKnife.bind(this);
                //用PullToRrfreashScrllView实现了上下拉
                pullView.setMode(PullToRefreshBase.Mode.BOTH);
                pullView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
                    @Override
                    public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                        page = 1;
                        new MyPresenter(MainActivity.this).getdata(page+"");
                        pullView.onRefreshComplete();
                    }

                    @Override
                    public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
                        page++;
                        new MyPresenter(MainActivity.this).getdata(page+"");
                        pullView.onRefreshComplete();
                    }
                });
                new MyPresenter(this).getdata(page+"");
                         }

            @Override
            public void loadSuccess(Object data) {
                Toast.makeText(this, "hhh", Toast.LENGTH_SHORT).show();
                final List <User> list = (List<User>) data;
                final MyAdapter adapter = new MyAdapter(list,MainActivity.this);
                //点击条目实现从不透明到透明再到不透明
                adapter.setOnItmeClickListener(new MyAdapter.ClickListener() {
                    @Override
                    public void onItmeClickListener(View view, int position) {
                        ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(view, "alpha", 1f, 0, 1f);
                        objectAnimator.setDuration(3000);
                        objectAnimator.setInterpolator(new LinearInterpolator());
                        objectAnimator.start();
                    }
                });
                //长按条目删除
                adapter.setOnLongItmeClickListener(new MyAdapter.LongClickListener() {
                    @Override
                    public void onLongItmeClickListener(View view, final int position) {
                        User user = adapter.getBean(position);
                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                        builder.setMessage("是否确定删除"+list.get(position));
                        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                list.remove(position);
                                adapter.notifyDataSetChanged();
                            }
                        });
                        builder.setNegativeButton("取消",null);
                        builder.show();
                    }
                });
                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
                linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                recyView.setLayoutManager(linearLayoutManager);
                recyView.setAdapter(adapter);
            }

            @Override
            public void loadError(Result result) {

    }

5.适配器

package com.example.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
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.bean.User;
import com.example.lianxizk3.MainActivity;
import com.example.lianxizk3.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by 。 on 2018/12/14.
 */

public class MyAdapter extends RecyclerView.Adapter{
    private List<User> list = new ArrayList<>();
    private Context context;
    private ClickListener clickListener;
    private LongClickListener longClickListener;

    public MyAdapter(List<User> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if(viewType==0){
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.one, parent, false);
            return new MyViewHolder(view);
        }else if(viewType==1){
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.two, parent, false);
            return new ViewHolder2(view);
        }

        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        int itemViewType = holder.getItemViewType();
        switch (itemViewType){
            case 0:
                MyViewHolder myViewHolder = (MyViewHolder) holder;
                myViewHolder.textView1.setText(list.get(position).getTitle());
                Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(myViewHolder.imageView1);
                myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListener.onItmeClickListener(v,position);
                    }
                });
                myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        longClickListener.onLongItmeClickListener(v,position);
                        return true;
                    }
                });
                break;
            case 1:
                ViewHolder2 holder2 = (ViewHolder2) holder;
                holder2.textView2.setText(list.get(position).getTitle());
                Glide.with(context).load(list.get(position).getThumbnail_pic_s()).into(holder2.imageView21);
                Glide.with(context).load(list.get(position).getThumbnail_pic_s02()).into(holder2.imageView22);
                Glide.with(context).load(list.get(position).getThumbnail_pic_s03()).into(holder2.imageView23);
                holder2.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListener.onItmeClickListener(v,position);
                    }
                });
                holder2.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        longClickListener.onLongItmeClickListener(v,position);
                        return true;
                    }
                });
                break;
        }
    }
    public User getBean(int position){
        User user = list.get(position);
        return user;
    }

    @Override
    public int getItemViewType(int position) {
        String a1 = list.get(position).getThumbnail_pic_s();
        String a2 = list.get(position).getThumbnail_pic_s02();
        String a3 = list.get(position).getThumbnail_pic_s03();
        if(!TextUtils.isEmpty(a2)&&!TextUtils.isEmpty(a3)){
            return 1;
        }else{
            return 0;
        }
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder{

        private final ImageView imageView1;
        private final TextView textView1;

        public MyViewHolder(View itemView) {
            super(itemView);
            imageView1 = itemView.findViewById(R.id.one_image);
            textView1 = itemView.findViewById(R.id.one_text);

        }
    }
    class ViewHolder2 extends RecyclerView.ViewHolder{

        private final TextView textView2;
        private final ImageView imageView21;
        private final ImageView imageView22;
        private final ImageView imageView23;

        public ViewHolder2(View itemView) {
            super(itemView);
            textView2 = itemView.findViewById(R.id.two_view);
            imageView21 = itemView.findViewById(R.id.two_image1);
            imageView22 = itemView.findViewById(R.id.two_image2);
            imageView23 = itemView.findViewById(R.id.two_image3);
        }
    }
    public interface ClickListener{
        void onItmeClickListener(View view,int position);
    }
    public void setOnItmeClickListener(ClickListener clickListener){
        this.clickListener = clickListener;
    }
    public interface LongClickListener{
        void onLongItmeClickListener(View view,int position);
    }
    public void setOnLongItmeClickListener(LongClickListener longClickListener){
        this.longClickListener = longClickListener;
    }

}

6.xml

<com.handmark.pulltorefresh.library.PullToRefreshScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/pull_view">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/recy_view"></android.support.v7.widget.RecyclerView>
    </LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>

7.在build.gradle中添加依赖

  //butterknife的依赖
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    //gson的依赖
    implementation files('libs/gson-2.5.jar')
    //glide的依赖
    compile 'com.github.bumptech.glide:glide:3.8.0'
    //okhttp的依赖
    implementation 'com.squareup.okhttp3:okhttp:3.12.0'
    //recyclerview的依赖
    implementation 'com.android.support:recyclerview-v7:26.1.0'

8.在清单文件中添加依赖

<uses-permission android:name="android.permission.INTERNET"/>
    <!-- 必须的权限 -->

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值