三,多条目加载 上拉刷新

一,NewsModel

public class NewsModel {

      public void newsModel(String url, final MOkCallback mOkCallback){
          OkHttpUtil instence = OkHttpUtil.getInstence();
          instence.doGet(url, new OkHttpUtil.OkCallback() {
              @Override
              public void getSuccess(String json) {
                  //成功
                  if(mOkCallback!=null){
                      mOkCallback.getSuccess(json);
                  }
              }

              @Override
              public void getError(Exception e) {
                //失败
                  if(mOkCallback!=null){
                      mOkCallback.getError(e);
                  }
              }
          });
      }

    public interface MOkCallback{
        void getSuccess(String json);
        void getError(Exception e);
    }
}


二,NewsPersenter

public class NewsPresenter extends BasePresenter<NewsView>{

    private NewsModel newsModel;

    public NewsPresenter(NewsView view) {
        super(view);
    }


    public void newsPresenter(String url){
        newsModel.newsModel(url, new NewsModel.MOkCallback() {
            @Override
            public void getSuccess(String json) {
                //成功
                if(view!=null){
                    view.getSuccess(json);
                }
            }

            @Override
            public void getError(Exception e) {
               //失败
                if(view!=null){
                    view.getError(e);
                }
            }
        });
    }

    @Override
    protected void initModel() {
        newsModel = new NewsModel();
    }
}
 


三,NewsActivity

public class MainActivity extends BaseActivity<NewsPresenter> implements NewsView {
    private static final String TAG = "MainActivity------";
    private XRecyclerView recyclerView;
    private MyAdapter myAdapter;
    int page=1;

    @Override
    protected void initListener() {

    }

    @Override
    protected void initData() {
      presenter.newsPresenter(HttpUrl.News_URL+page);
    }

    @Override
    protected void initview() {
        recyclerView = findViewById(R.id.revyleview);
        recyclerView.setPullRefreshEnabled(true);//设置上拉刷新
        recyclerView.setLoadingMoreEnabled(true);//设置下拉加载

    }

    @Override
    protected NewsPresenter presenterById() {
        return new NewsPresenter(this);
    }

    @Override
    protected int setView() {
        return R.layout.activity_main;
    }




    @Override
    public void getSuccess(String json) {
         //成功
        Log.d(TAG, "activity成功: "+json);
        Gson gson=new Gson();
        NewsBean newsBean = gson.fromJson(json, NewsBean.class);
        List<NewsBean.DataBeanX.DataBean> data = newsBean.getData().getData();

        //创建适配器
        myAdapter = new MyAdapter(MainActivity.this,data);
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(myAdapter);

        recyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                //上拉刷新
                page=1;
                recyclerView.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                //下拉加载
                page++;
                recyclerView.loadMoreComplete();
            }
        });

        myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void OnItemClickListener(View v, int position) {
                ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(v,"alpha",1f,0f,1f);
                objectAnimator.setDuration(3000);
                objectAnimator.start();
            }
        });
    }

    @Override
    public void getError(Exception e) {
        //失败


    }
}

四 适配器


public class MyAdapter extends RecyclerView.Adapter {

    private Context context;
    private List<NewsBean.DataBeanX.DataBean> list;
    private static final int one=1;
    private static final int two=2;

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

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if(viewType==one){
            View inflate1 = LayoutInflater.from(context).inflate(R.layout.item01_adapter, parent, false);
            ViewHolder01 holder01=new ViewHolder01(inflate1);
            return  holder01;
        }else{
            View inflate2 = LayoutInflater.from(context).inflate(R.layout.item02_adapter, parent, false);
            ViewHolder2 holder2=new ViewHolder2(inflate2);
            return holder2;
        }


    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
          if(holder instanceof ViewHolder01){
              String url = "http://365jia.cn/uploads/";
              ViewHolder01 viewHolder01= (ViewHolder01) holder;
              viewHolder01.t1.setText(list.get(position).getTitle());
              viewHolder01.t3.setText(list.get(position).getViews()+"评论");
              viewHolder01.t4.setText(list.get(position).getViews_label()+"赞");
              String pic1 = list.get(position).getPics().get(0);  //p1图片路径


              //加载图片
              ImageLoader.getInstance().displayImage(url+pic1,viewHolder01.item1_imageView, MyApp.getOptions());
          }else if(holder instanceof  ViewHolder2){
              String url = "http://365jia.cn/uploads/";
            ViewHolder2 holder2= (ViewHolder2) holder;
               holder2.item2_t1.setText(list.get(position).getTitle());

                  //获取图片路径
              String i1 = list.get(position).getPics().get(0);
              String i2 = list.get(position).getPics().get(1);
              String i3 = list.get(position).getPics().get(2);

              //加载图片
              ImageLoader.getInstance().displayImage(url+i1,holder2.item2_image1,MyApp.getOptions());
              ImageLoader.getInstance().displayImage(url+i2,holder2.item2_image2,MyApp.getOptions());
              ImageLoader.getInstance().displayImage(url+i3,holder2.item2_image3,MyApp.getOptions());


              //点击图片 图片变透明
              ((ViewHolder2) holder).item2_image1.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      onItemClickListener.OnItemClickListener(v,position);
                  }
              });

          }
    }

    @Override
    public int getItemCount() {
        return list==null ? 0:list.size();
    }

    @Override
    public int getItemViewType(int position) {
        List<String> pics = list.get(position).getPics();
        if(pics.size()==one){
            return one;
        }
        return  two;
    }

    class ViewHolder01 extends RecyclerView.ViewHolder{
        private TextView t1,t3,t4;
        private ImageView item1_imageView;


        public ViewHolder01(View itemView) {
            super(itemView);
            t1=itemView.findViewById(R.id.tv1_title1);
            t3=itemView.findViewById(R.id.tv1_title3);
            t4=itemView.findViewById(R.id.tv1_title4);
            item1_imageView=itemView.findViewById(R.id.img1_image1);
        }
    }


    class ViewHolder2 extends RecyclerView.ViewHolder{
        private TextView item2_t1;
        private ImageView item2_image1,item2_image2,item2_image3;

        public ViewHolder2(View itemView) {
            super(itemView);
            item2_t1=itemView.findViewById(R.id.tv2_title1);
            item2_image1=itemView.findViewById(R.id.image1);
            item2_image2=itemView.findViewById(R.id.image2);
            item2_image3=itemView.findViewById(R.id.image3);
        }
    }





    //给recyleview自定义接口
    OnItemClickListener onItemClickListener;


    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }


    public interface OnItemClickListener{
        void OnItemClickListener(View v,int position);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uniapp提供了`uni-scroll-view`组件来实现下刷新和上更多功能。 首先,在页面中使用`uni-scroll-view`组件,设置其`@scrolltolower`事件来监听滚动到底部的事件,然后在事件处理函数中执行更多数据的操作。代码示例如下: ```html <template> <view> <uni-scroll-view :enable-back-to-top="true" @scrolltolower="loadMore"> <!-- 渲染数据列表 --> <view v-for="(item, index) in list" :key="index">{{ item }}</view> </uni-scroll-view> </view> </template> <script> export default { data() { return { list: [], // 数据列表 page: 1, // 当前页码 pageSize: 10, // 每页数据条数 isLoading: false // 是否正在 }; }, methods: { // 更多数据 loadMore() { if (this.isLoading) { return; } this.isLoading = true; // 模拟异步数据 setTimeout(() => { this.list = this.list.concat(this.generateData(this.page, this.pageSize)); this.page++; this.isLoading = false; }, 1000); }, // 生成数据 generateData(page, pageSize) { const start = (page - 1) * pageSize; const end = page * pageSize; return Array.from({ length: pageSize }, (_, i) => `Item ${start + i + 1}`); } } }; </script> ``` 然后,在`uni-scroll-view`组件上设置`enable-refresh`属性为`true`,设置`@refresh`事件来监听下刷新的事件,然后在事件处理函数中执行刷新数据的操作。代码示例如下: ```html <template> <view> <uni-scroll-view :enable-back-to-top="true" :enable-refresh="true" @scrolltolower="loadMore" @refresh="refresh"> <!-- 渲染数据列表 --> <view v-for="(item, index) in list" :key="index">{{ item }}</view> </uni-scroll-view> </view> </template> <script> export default { data() { return { list: [], // 数据列表 page: 1, // 当前页码 pageSize: 10, // 每页数据条数 isLoading: false // 是否正在 }; }, methods: { // 更多数据 loadMore() { if (this.isLoading) { return; } this.isLoading = true; // 模拟异步数据 setTimeout(() => { this.list = this.list.concat(this.generateData(this.page, this.pageSize)); this.page++; this.isLoading = false; }, 1000); }, // 刷新数据 refresh() { if (this.isLoading) { return; } this.isLoading = true; // 模拟异步数据 setTimeout(() => { this.list = this.generateData(1, this.pageSize); this.page = 2; this.isLoading = false; }, 1000); }, // 生成数据 generateData(page, pageSize) { const start = (page - 1) * pageSize; const end = page * pageSize; return Array.from({ length: pageSize }, (_, i) => `Item ${start + i + 1}`); } } }; </script> ``` 以上就是使用`uni-scroll-view`组件实现下刷新和上更多功能的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值