android线性加载recyclerview列表

在这里插入图片描述
依赖

implementation 'com.android.support:recyclerview-v7:25.3.1'
    implementation('com.jcodecraeer:xrecyclerview:1.5.9') {
        exclude group: 'com.android.support'
    }
    implementation 'com.github.bumptech.glide:glide:4.8.0'
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation 'com.google.guava:guava:16.0.1'
    implementation 'com.squareup.okhttp3:okhttp:3.12.0'

Mainactivity java

public class MainActivity extends AppCompatActivity implements XRecyclerView.LoadingListener,CallBacks<List<Goods>> {
    XRecyclerView xRecyclerView;
    LinearLayoutManager layoutManager;
    ListAdapter adapter;
    List<Goods> list=new ArrayList<>();
    int page=1;
    int sort=0;
    String url = "http://www.zhaoapi.cn/product/searchProducts?keywords=手机&page=";
    ListPresenter listPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件
        xRecyclerView=findViewById(R.id.xrecyclerview);
        xRecyclerView.setLoadingListener(this);
        //把数据加入reclerview
        adapter=new ListAdapter(this,list);
        xRecyclerView.setAdapter(adapter);
        //获取数据
        listPresenter=new ListPresenter(this);
        //拼接网址
        String urls=url+page+"&sort="+sort;
        //使用方法添加
        listPresenter.add(urls);
        //线性布局
        layoutManager=new LinearLayoutManager(this);
        //添加到布局
        xRecyclerView.setLayoutManager(layoutManager);
        //添加一下代码实现上拉加载,下拉刷新
        address_recyclerview.setLoadingMoreEnabled(true);// 下拉加载更多
        address_recyclerview.setLoadingListener(this);
        address_recyclerview.setNestedScrollingEnabled(false);
    }
    //上下刷新
    @Override
    public void onRefresh() {
    //新的从这里开始
    //判断单例模式
  if (address_precenter.isRunning()) {
  //设置刷新以及增加数据
            address_recyclerview.refreshComplete();
            address_recyclerview.loadMoreComplete();
            return;
        }
        //刷新
        address_recyclerview.refreshComplete();
        //重新请求网络数据
        address_precenter.reqeust(userId,sessionId,true);
     //到这里结束
   page=1;
        String urls=url+page+"&sort="+sort;
        list.clear();
        listPresenter.add(urls);
    }
    //上下刷新
    @Override
    public void onLoadMore() {
        page++;
        String urls=url+page+"&sort="+sort;
        listPresenter.add(urls);
    }
    //成功的方法
    @Override
    public void success(List<Goods> data) {
        //添加到list中
        list.addAll(data);
        //刷新
        adapter.notifyDataSetChanged();
        xRecyclerView.loadMoreComplete();
        xRecyclerView.refreshComplete();
        //删除
        adapter.setOnItmeClickListener(new ListAdapter.ClickListener() {
            @Override
            public void onItmeClickListener(View view, int position) {
                list.remove(position);
                adapter.notifyDataSetChanged();
            }
        });
    }
    //错误的方法
    @Override
    public void fail(Result result) {
        Toast.makeText(this,"错误",Toast.LENGTH_LONG).show();
    }
}

adapter加载进入列表

public class ListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Activity activity;
    private List<Goods> list;
    private ClickListener clickListener;
    public ListAdapter(MainActivity mainActivity,List<Goods> list){
        this.activity=mainActivity;
        this.list=list;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view=View.inflate(activity, R.layout.item_01,null);
        return new MyHolder(view);
    }
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        final MyHolder holder1= (MyHolder) holder;
        holder1.text1.setText(list.get(position).getTitle());
        holder1.text2.setText(list.get(position).getPrice()+"$");
        String images=list.get(position).getImages();
        String[] sqlit=images.split("\\|");
        Glide.with(activity).load(sqlit[0]).into(((MyHolder) holder).image);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(activity,"点击了",Toast.LENGTH_LONG).show();
                clickListener.onItmeClickListener(v,position);
            }
        });
    }
    @Override
    public int getItemCount() {
        return list.size();
    }
    public void setOnItmeClickListener(ClickListener clickListener){
        this.clickListener=clickListener;
    }
    private class MyHolder extends RecyclerView.ViewHolder {
        private final ImageView image;
        private final TextView text1;
        private final TextView text2;
        public MyHolder(View view) {
            super(view);
            image=view.findViewById(R.id.image);
            text1=view.findViewById(R.id.text1);
            text2=view.findViewById(R.id.text2);
        }
    }
    public interface ClickListener {
        void onItmeClickListener(View view,int position);
    }
}

model

public class ListModel {
    public static Result getGoods(String url){
        String s=Okhttp.get(url);
        Type type=new TypeToken<Result<List<Goods>>>(){}.getType();
        Gson gson=new Gson();
        Result result=gson.fromJson(s,type);
        return result;
    }
}

precenter

public class ListPresenter {
    CallBacks callBacks;
    public ListPresenter(CallBacks callBacks) {
        this.callBacks=callBacks;
    }
    Handler handler=new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Result result= (Result) msg.obj;
            if (result.getCode()==0){
                callBacks.success(result.getData());
            }else {
                callBacks.fail(result);
            }
        }
    };
    public void add(final String url){
        new Thread(){
            @Override
            public void run() {
                super.run();
                Result result=ListModel.getGoods(url);
                Message message=handler.obtainMessage();
                message.obj=result;
                handler.sendMessage(message);
            }
        }.start();
    }
}

okthhp加载数据

public class Okhttp {
    public static String get(String url){
        OkHttpClient okHttpClient=new OkHttpClient();
        Request request=new Request.Builder().url(url).build();
        Call call=okHttpClient.newCall(request);
        try {
            Response execute = call.execute();
            return execute.body().string();

        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }

}

item布局

<?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="horizontal">
    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:id="@+id/image"
        android:adjustViewBounds="true"
        android:minHeight="50dp"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"/>
        <TextView
            android:textColor="#f00"
            android:id="@+id/text2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"/>
    </LinearLayout>

</LinearLayout>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值