Giter VIP home page Giter VIP logo

commonadapter's People

Contributors

kaleai avatar thinwonton avatar valuesfeng avatar xxxifan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

commonadapter's Issues

setHeaderView 横向滚动支持,内部类包权限限制方法重写

RcvAdapterWrapper.setFullSpan (line:243)

没有兼容横向 LayoutManager

    private void setFullSpan(@Nullable View view, RecyclerView.LayoutManager layoutManager) {
        if (view != null) {
            int itemWidth = view.getLayoutParams() != null ?
                view.getLayoutParams().height : RecyclerView.LayoutParams.WRAP_CONTENT;
            int itemHeight = view.getLayoutParams() != null ?
                    view.getLayoutParams().height : RecyclerView.LayoutParams.WRAP_CONTENT;

            if (layoutManager instanceof StaggeredGridLayoutManager) {
                StaggeredGridLayoutManager.LayoutParams layoutParams =
                        new StaggeredGridLayoutManager.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT, itemHeight);
                layoutParams.setFullSpan(true);
                view.setLayoutParams(layoutParams);
            //1. GridLayoutManager extend LinearLayoutManager ,不必要的类型判断
            //2. 当布局是横向滚动时,应该时 height 设为MatchParent
            //} else if (layoutManager instanceof GridLayoutManager
            //        || layoutManager instanceof LinearLayoutManager) {
            } else if (layoutManager instanceof LinearLayoutManager) {
                if (((LinearLayoutManager) layoutManager).getOrientation() == LinearLayoutManager.VERTICAL) {
                    itemWidth = ViewGroup.LayoutParams.MATCH_PARENT;
                } else {
                    itemHeight = ViewGroup.LayoutParams.MATCH_PARENT;
                }
                view.setLayoutParams(new RecyclerView.LayoutParams(itemWidth, itemHeight));
            }
            notifyDataSetChanged();
        }
    }

CommRcvAdapter.RcvAdapterItem

  • 内部类是 package 权限
  • public abstract class CommonRcvAdapter<T> extends RecyclerView.Adapter<CommonRcvAdapter.RcvAdapterItem>泛型的内部类,很多泛型方法没法 override

RcvAdapter自动刷新错位问题

代码如下,这是联网请求获取数据成功后的回调,根据类型(首次请求/下拉刷新/加载更多)来设置数据源。

  • 由于adapter只提供了setData方法设置数据,因此在下拉刷新和加载更多我想要插入/删除数据的时候只能自己重新组装出一个List来setData,多有不便,建议adapter增加addData和removeData的公共方法
  • 在版本更新说明中有提到“支持适配器的数据自动绑定,只用操作数据便可自动notify界面”,基于这点我把代码中最后一行的notify注释掉,结果出现数据错位问题,反复上下滑动列表几次才会显示正常,放开注释就一切正常,还请查证原因,谢谢
 public void onData(List<Book> books) {
                if (books == null) return;
                switch (refreshType) { // 设置新的数据
                    case TYPE_NORMAL:
                        adaper.setData(books);
                        break;
                    case TYPE_REFRESH:
                       /*实际是这样的重新组装数据源
                        List a = adaper.getData();
                        a.addAll(0, books);
                        adaper.setData(a);*/
                        // adaper.addData(0, books);期望是这样的
                        recyclerView.refreshComplete();
                        break;
                    case TYPE_LOADMORE:
                        List b = adaper.getData();
                        b.addAll(adaper.getItemCount(), books);
                        adaper.setData(b);
                       // adaper.addData(adaper.getItemCount(), books);
                        recyclerView.loadMoreComplete();
                        break;
                }
                adaper.notifyDataSetChanged(); // 通知数据刷新
            }

ViewHolder中的item问题

来,看截图,这中间的item是一个接口对吧。

image

ok,继续,如果我的情况是一个viewpager ,里面各种recyclerview,我现在需要给rv加载RecyclerPool。
就有问题了。

image

这里面的holder是被会复用的,那么,如果holder被复用的情况下, 如果保证holder中的item正确指向呢?

RecyclerView MemoryLeak

问题如下

  • 继承CommonRcvAdapter
  • 多个item type
  • 在任意item里面
@Override
public void handleData(Object o, int position) {
    Glide.with(mFrg).load("http://xxx.png").into(imageview);
}

也就是在单个item里面使用Glide加载图片,本来图片宽match_parent,高135dp固定值。

这样程序内存一直增加,看情况是view不停在绘制。注释加载图片代码,情况恢复正常。

如何更新dataList

点击了某个item 对应的DemoModel 也要进行update 有什么好办法吗

debug版本无法运行

Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the 'java' gradle plugin in a library submodule add
targetCompatibility = '1.7'
sourceCompatibility = '1.7'
to that submodule's build.gradle file.

问题:觉得AdapterModel 的getDataTypeCount()好像多余

觉得AdapterModel 的getDataTypeCount()好像多余,总觉得没有用,修改了效果业是一样,能说说当初设计这个的初衷不呢。Demo中给,那个返回是3,随便修改效果业是一样,没有两样,感到很疑惑

我这样做 item局部刷新 发现布局还是会复用 出现状态重复显示的ui

            return new SetDefaultCardListAdapter(mContext, new SetDefaultCardListAdapter.CardItemSelCallback() {
                @Override
                public void onItemCardSelClick(int position) {
                    LogUtils.i(TAG,"position " + position);
                    for (int i = 0; i < data.size(); i++) {
                        if (i == position) {
                            data.get(i).setSel(true);
                        } else {
                            data.get(i).setSel(false);
                        }
                    }
                    idRecyclerview.getAdapter().notifyDataSetChanged();
                }
            });

RecyclerView加载数据显示不完全。

你好,我在使用您提供的CommonRcvAdapter时,按照Demo的例子自定义,改写了一下布局,但是现在有个问题,RecyclerView经常不会把数据加载完全,很多时候都只能加载一部分,另外的显示的全是空白。请问这是什么原因引起的呢?

加载代码:
final List data = DataManager.loadData(MainActivity.this);
Log.i(TAG, "data.size = " + data.size()); //size显示是正常的
((CommonRcvAdapter) mRecyclerView.getAdapter()).setData(data); // 设置新的数据
mRecyclerView.getAdapter().notifyDataSetChanged(); // 通知数据刷新

代码可以查看https://github.com/Clearlee/GoKitchen

请问如何去获取点击item所对应的数据?

我是在adapterItem初始化的时候对view设置一个clickListener, 然后传入一个interface做点击事件的响应,但是发现没有方法可以获取到这个item所对应的data,我应该如何实现比较好?

可不可以不混淆IAdapter

不是什么大问题,只是每次new CommonxxAdapter的时候,createItem方法的参数是一个Object o,看起来有点迷惑

CommonRcvAdapter的onBindViewHolder 方法里面直接用mItemType,没调用getItemViewType,会不会有问题?

@Deprecated
    @Override
    public int getItemViewType(int position) {
        mItemType = getItemType(mDataList.get(position));
        return mUtil.getIntType(mItemType);
    }

    @Override
    public Object getItemType(T t) {
        return -1; // default
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new RcvAdapterItem(parent.getContext(), parent, createItem(mItemType));
    }

    @SuppressWarnings("unchecked")
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        debug((RcvAdapterItem) holder);
        ((RcvAdapterItem) holder).item.handleData(getConvertedData(mDataList.get(position), mItemType), position);
    }


@tianzhijiexian CommonRcvAdapte的onBindViewHolder 方法里面直接用mItemType,没调用getItemViewType,会不会有问题?

依赖失败

当前这个库依赖失败。我这边有缓存可以,其他工程我试了下都不行,任何版本。其他同事那边试过也不行,连接不上。昨天打包还OK的。

getItem占用内存

getItemView中有initItem会一直创建新的对象 导致内存一直增加

exception -> java.lang.StackOverflowError: stack size 8MB

好像造成了死循环导致的,

引用:

mRecyclerView = (RecyclerView) findViewById(R.id.rcv);
mRecyclerView.setLayoutManager(new GridLayoutManager(RCVActivity.this, 2));

这里引发的问题:

ExRcvAdapterWrapper.class:

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return (ViewHolder)(viewType == 99930?new ExRcvAdapterWrapper.SimpleViewHolder(this.mHeaderView):(viewType == 99931?new ExRcvAdapterWrapper.SimpleViewHolder(this.mFooterView):this.mWrapped.onCreateViewHolder(parent, viewType)));
    }

报错:

ERR: stack=java.lang.StackOverflowError: stack size 8MB
at kale.adapter.CommonRcvAdapter.getItemType(CommonRcvAdapter.java:109)
at kale.adapter.CommonRcvAdapter.getItemViewType(CommonRcvAdapter.java:103)

使用CommonRcvAdapter时不引用databinding包会编译失败

项目中没有引用databinding包,就会提示ObserverList找不到,我代码这样使用

mList = new ArrayList<>(); mAdapter = new CommonRcvAdapter<DeviceModel>(mList) { @NonNull public AdapterItem createItem(Object o) { return new DeviceItem(); } }; mRecyclerView.setAdapter(mAdapter);

就提示错误了,app的build.gradle导入了provided 'com.android.databinding:baseLibrary:1.0'才能通过编译,有没有办法不让我自己导这个包的?因为项目没有用到这个包

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.