美文网首页
tablayout+viewpager+recycleview瀑

tablayout+viewpager+recycleview瀑

作者: jiluyixia | 来源:发表于2019-11-13 15:46 被阅读0次
hhhhh.jpg

上一节实现了tablayout部分,viewpager内容用的空Fragment。现在来实现Fragment。
每个Fragment里面的数据,正是之前实现的post请求获得的,但是post参数里面,有个动态参数groupChannelCode。这个groupChannelCode是tablayout的TravelTabModel里面的。
根据groupChannelCode请求post,每个tablayout的tab下,对应着每个tab的数据。
上一节的fragments集合,修改为

fragments.add(new TravelTabFragment(context,travelTabModel.getTabs().get(a).getGroupChannelCode()));

根据travelTabModel里面,每个tab的groupChannelCode,来创建TravelTabFragment类:

public class TravelTabFragment extends BaseActivity {
    TravelTabFragmentAdapter adapter;
    String groupChannelCode;
    Context context;

    public TravelTabFragment(Context context,String groupChannelCode) {
        this.context = context;
        this.groupChannelCode = groupChannelCode;
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        MainPresenter presenter = new MainPresenter(this);
        presenter.getTravel(groupChannelCode);

        View view = inflater.inflate(R.layout.travel_tab_fragment, null);
        RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.travel_tab_recycler);
        recyclerView.setLayoutManager(new StaggeredGridLayoutManager( 2, RecyclerView.VERTICAL));
        adapter = new TravelTabFragmentAdapter();
        TravelModel travelModel = SPUtils.getInstance(context).get(ConstantsUtil.TRAVEL_FRAGMENT_DATA, TravelModel.class);
        if(travelModel != null){
            adapter.getData(travelModel);
        }
        recyclerView.setAdapter(adapter);

        return view;
    }

    @Override
    public void getTravelModel(TravelModel travelModel) {
        if(travelModel!=null) {//滑动到不同的tab,都会请求一次getTravel,获取不同的结果。
            SPUtils.getInstance(context).put(ConstantsUtil.TRAVEL_FRAGMENT_DATA, travelModel);
            adapter.getData(travelModel);//所以,不改变请求的groupChannelCode,展示的图片也会改变。相当于刷新了。。
        }
        Log.v("abbb2", "==++++" + travelModel.getResultList().get(0).getArticle().getImages().get(0).getDynamicUrl());
    }

}

recycleview瀑布流:

recyclerView.setLayoutManager(new StaggeredGridLayoutManager( 2, RecyclerView.VERTICAL));

用presenter.getTravel(groupChannelCode);去请求数据:

public void getTravel(String groupChannelCode) {
        Log.v("abbb", "111==");
        Observable<TravelModel> observable = mModel.getTraver(groupChannelCode);
        observable.subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<TravelModel>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(TravelModel travelModel) {
                        travel = travelModel;
                        Log.v("abbb", "888==" + travel.getResultList().get(0).getArticle().getArticleTitle());
                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                        mView.getTravelModel(travel);
                    }
                });
}
public Observable<TravelModel> getTraver(String groupChannelCode) {
        RequestBody body=RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),params);
        //Observable<TravelModel> observable = RetrofitHelper.getInstance().getServer().getPhoto(TRAVEL_URL,body);
        PagePara pagePara = new PagePara(1,10,9,0);
        TravelPhotoResponse travelPhotoResponse = new TravelPhotoResponse(-1,groupChannelCode,
                null,-180,-180,0,pagePara,1,"json");
        Observable<TravelModel> observable = RetrofitHelper.getInstance().getServer().getPhoto(TRAVEL_URL,travelPhotoResponse);
        return observable;
}
@Headers({
            "cid: 09031014111431397988",
            //"contentType: json",
            "Content-Type: application/json",
            "Accept: application/json"
    })
    @POST
Observable<TravelModel> getPhoto(@Url String url, @Body TravelPhotoResponse info);

此处,将之前的params请求json数据,换成了一个TravelPhotoResponse对象,通过构造函数,修改groupChannelCode的值。
(网上通过JSONObject 将字符串直接转换为javabean对象,因为JSONObject 导包问题较复杂,最终放弃。)
另外,添加了一个SPUtils类,用作本地存储数据,避免网络不好时,页面加载慢。
数据拿到了,再看看RecyclerView.Adapter具体实现:

public class TravelTabFragmentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    TravelModel travelModel;
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        Log.v("sizee2","onCreateViewHolder==");
        return new ItemHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.travel_item,
                parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        Log.v("sizee2","onBindViewHolder==");
        if(travelModel == null){
            return;
        }
        if (holder instanceof ItemHolder) {
            if(travelModel.getResultList().get(position).getArticle() != null) {
                ((ItemHolder) holder).travelImage.setImageURL(travelModel.getResultList().get(position).getArticle().getImages().get(0).getDynamicUrl());
                ((ItemHolder) holder).userImage.setImageURL(travelModel.getResultList().get(position).getArticle().getAuthor().getCoverImage().getDynamicUrl());
                ((ItemHolder) holder).articleTitle.setText(travelModel.getResultList().get(position).getArticle().getArticleTitle());
                ((ItemHolder) holder).userName.setText(travelModel.getResultList().get(position).getArticle().getAuthor().getNickName());
                ((ItemHolder) holder).zanCount.setText(travelModel.getResultList().get(position).getArticle().getLikeCount() + "");
            }
        }
    }

    @Override
    public int getItemCount() {
        return 10;
    }

    public class ItemHolder extends RecyclerView.ViewHolder {
        MyImageView travelImage;
        CircleImageView userImage;
        TextView articleTitle;
        TextView userName;
        TextView zanCount;
        public ItemHolder(@NonNull View itemView) {
            super(itemView);
            travelImage = itemView.findViewById(R.id.travel_image);
            userImage = itemView.findViewById(R.id.user_image);
            articleTitle = itemView.findViewById(R.id.articleTitle);
            userName = itemView.findViewById(R.id.user_name);
            zanCount = itemView.findViewById(R.id.zanCount);
        }
    }

    public void getData(TravelModel travelModel){
        Log.v("sizee2","getData==");
        this.travelModel = travelModel;
        notifyDataSetChanged();
    }
}

就是一个CardView布局。

具体代码如下:
https://github.com/doudousang/tablayout-viewpage-recycleview.git
另外因为这个viewpager可能会与主页面的viewpager滑动冲突,最终将住viewpager的滑动事件屏蔽了。
参考代码:
Viewpager禁止左右滑动

相关文章

  • tablayout+viewpager+recycleview瀑

    上一节实现了tablayout部分,viewpager内容用的空Fragment。现在来实现Fragment。每个...

  • 2020-08-29

    天生桥 一瀑银河天上挂 二瀑横搭彩虹桥 三瀑相识到白首 四瀑滔滔似马尾 五瀑叠叠似珠帘 六瀑将士望头盔 七瀑遥遥似...

  • 一波烟水天上来。 清泉直下三千尺, 潭涌飞花散瑶台。

  • 《瀑》

    瀑 艰难的道路 造就了我宏伟的气派 险峻的山崖 衬托出我壮丽的雄姿! 说我是银河 多么遥远并言过其实, 说我是布吗...

  • 其一、美人瀑(平九佳) 峭壁齐天断,清帘黑幕崖。 伊人身段巧,贴我俊雄怀。 其二、相思瀑(平一先) 起舞弄翩跹,相...

  • 高高的高高的 垂 泄 下 来 巨灵的舌头 伸入 岩石内部 正如情人的手 滑向小腹 ...

  • 云高衔远山, 长空秋河满, 飞泻成白练 盈满世间泉。

  • 《瀑》

    绿营伏卧三千朔,刀剑似火沙中舵; 我服黄天无涯阔,誓把青山荡翻过! ——心潮至此,无为有之,遂如此记

  • 冰瀑奇景观赏

    冰瀑奇景观赏 由冰瀑、雾凇、冰瀑跳水等元素组成。百米宽冰瀑落差12米,冰瀑之下的雾凇连绵数里、宛如仙境;悬崖冰瀑跳...

网友评论

      本文标题:tablayout+viewpager+recycleview瀑

      本文链接:https://www.haomeiwen.com/subject/vznhictx.html