Coder Social home page Coder Social logo

devahamed / multiviewadapter Goto Github PK

View Code? Open in Web Editor NEW
819.0 819.0 151.0 25.43 MB

Easily create complex recyclerview adapters in android

Home Page: https://devahamed.github.io/MultiViewAdapter

License: Apache License 2.0

Java 100.00%
android android-library diffutils java-library recycleradapter recyclerview recyclerview-adapter recyclerview-multi-type

multiviewadapter's Issues

Expandable groups

Hi! first of all, awesome library!!

I found an issue with the expand collapse feature. While items expand and collapse correctly, groups can't collapse again, except if I click on another group(in EXPANDABLE_MODE_SINGLE). When i call the method isItemExpanded() after toggleGroupExpansion() it returns allways false.

This is a clone of your proyect:

multiviewadapter

.setSelectedItem not working

BaseDataManager.setSelectedItem can only be called from within the same library (com.github.devahamed:multi-view-adapter) less... (Ctrl+F1)
This API has been flagged with a restriction that has not been met. Examples of API restrictions: * Method can only be invoked by a subclass * Method can only be accessed from within the same library (defined by the Gradle library group id) * Method can only be accessed from tests. You can add your own API restrictions with the @RestrictTo annotation. Issue id: RestrictedApi

here is my code

if(taxListDataSet.contains(row1)) {
rowDataListManager.setSelectedItem(taxListDataSet.get(taxListDataSet.indexOf(row1)));
selectableAdapter.notifyDataSetChanged();
}

Change item's decoration color

Instead of the decoration takes the background color of parent view containing the recyclerview, could we change the color of decoration? Many thanks.

Remove file templates

File templates is not a widely used feature since it requires set-up from the user side. Also whenever the AndroidStudio is updated users have to move the file templates manually.

Apart from this file templates is additional burden to keep them updated with each release. So we can remove the file templates from the library.

Issue to bind

java.lang.IllegalStateException: Binder not found for position. Position = 0 using wiki simple usage

Move DiffUtil calculation to background thread

DiffUtil calculation is done at the main thread. For lists smaller count, the calculation on main thread is fine. But for larger lists it might block the main thread for few frames.

NullPointerException in the sample app

In 'Simple grid' and 'Complex' page, long press the grid item will caused NullPointerException:

FATAL EXCEPTION: main
    Process: com.ahamed.sample, PID: 25712
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.helper.ItemTouchHelper.startDrag(android.support.v7.widget.RecyclerView$ViewHolder)' on a null object reference
    at com.ahamed.multiviewadapter.CoreRecyclerAdapter$2.onStartDrag(CoreRecyclerAdapter.java:79)
    at com.ahamed.multiviewadapter.BaseViewHolder.startDrag(BaseViewHolder.java:162)
    at com.ahamed.sample.common.binder.GridItemBinder$ItemViewHolder$2.onItemLongClick(GridItemBinder.java:73)
    at com.ahamed.sample.common.binder.GridItemBinder$ItemViewHolder$2.onItemLongClick(GridItemBinder.java:71)
    at com.ahamed.multiviewadapter.BaseViewHolder.onLongClick(BaseViewHolder.java:44)

Repeating menu groups in a single list

Hello. Been using your library since yesterday, and it has been wonderful. Thanks for the effort.

Having a question here.. how do I build such a list:


header a
item a1
item a2

header b
item b1
item b2

where basically header a and b are the same object type, and items a1, a2, b1 and b2 are also the same type.

If in the adapter I have two list managers (say, headers and items), then headers will grouped at the top, and all of the items will be grouped below.

Maybe this is just a stupid question, but really appreciate any help. Thanks beforehand.

Grid Layoutmanger spacing.

I have to increase gap of grid view items nearly 23dp. But I'm not getting that much spacing in between. Could you please suggest me on this?
My span count is 2:
Actual Result:
Grid1 Grid2
Grid3 Grid4

Excepted Result:
Grid1 Grid2
Grid3 Grid4

Expanding non-child groups

Is it possible to expand groups that are not children?
For example, I have a header that says "expand all", when clicking this header I want to expand three different groups bellow this header.
As far as I can see I can only expand from the ViewHolder itself and that's not enough for this requirement I think.

Improve test cases - Migrate to unit test cases

At the time of v1.2.6 release, the combined test coverage stands at 55%. These include some false positive test cases as well. Since we have android unit test which needs emulator to boot up, our CI build times are high and fail most of the times. So its time to improve the test cases for the library.

  • Convert all test cases into jUnit tests
  • Remove the false positive test cases
  • Increase the coverage at least to 80%

Effect of expanding and collapsing an item on the holder's itemView

When an item in the expandable list is expanded or collapsed, most of the contents of the holder's
itemView are not affected (except the expand/contract indicator).
I have a holder which has many complex views (including a TextureView) that do not need to be refreshed every time I expand or collapse that item.
So I was thinking that shouldn't there be an alternative abstract method in the ItemBinder class which should get invoked instead of invoking the bind() method when expanding or collapsgin an item, where we put the views that get changed only on expanding/collapsing? I think the impact on performance could be reduced by this.

Item click and long click

Hello, first of all, congratulations for this great library. I have a question. Does this library support item click and long click detection? Thanks in advance!

Sorting

Hi Ahamed,

Your library is awesome and saved me lots of times and headache, thank you.

I was wondering if there is a way to add SortedList or any kind of sorting to items in the DataListManager as my data is coming through RxJava and I have no clue about the order of them so I have to sort it before passing it to Adapter.

I was doing it before by adding my item to SortedList and adding Comprable to my model.

about getPositionInAdapter method

Corerecycleradapter ——>getpositioninadapter (BaseDataManager dataManager, int binderPosition)
What is the effect of this method?
I did not read, ask for answers.
Thank you

Incorrect behaviour of "selection_mode"

Information Needed:

  • Android API level: 21
  • Library Version: 2.0.0-alpha01
  • Recyclerview Version: 28.0.0

What:
When adapter has selection mode as 'Multiple' and sections has selection mode as 'Single', adapter behaves as if the selection mode was 'Single'

Steps to reproduce:

  1. Install sample app, goto 'selection' demo screen
  2. Set adapter selection mode as 'Multiple' and set selection mode as 'Single' for all the sections.
  3. Select an item in section 1 and select an item in section 2.
  4. Notice how the section 1 item is unselected. This is a behaviour of 'Single' mode, but it should not be the case since adapter has 'Multiple'

Refactoring Library to v2

I have been developing the library under the wraps for a few months. Open source development should not happen that way, but i regret doing the same. I am currently in the process of migrating to AndroidX. Once done v2 source code will be dropped with a better documentation and test cases.

  • Drop new source code into the repo
  • Add test cases for v2 codebase
  • Add new sample app
  • Release sample app into playstore
  • Create new website for library
  • Better javadoc comments - will be improved continuously
  • Improve wiki documentation - Choose wiki hosting like MkDocs or GitBook
  • Make v2 branch as primary
  • Add issue and pull request templates
  • Create kanban style project management inside the github repo
  • Add new ReadMe.md
  • Add Milestones.md
  • Add Contributions.md
  • Add a readme, which explains the internals of the library

Add ui tests

The entire library is not tested. Adding test cases will help the library to iterate quickly and ensures the new feature doesn't break.

Automate snapshots deployment

Build snapshots of library from the default branch and deploy them to artifactory. We have already integrated with CI pipeline, where builds are checked nightly on default branch. We can leverage this and deploy snapshots either,

  1. Nightly
  2. Weekly
  3. On every push to the default branch

We have to choose any one of the options above and automate the deployment process.

Update to support library to 28.0.0 stable

Since android support libraries are moving into jetpack, and package names are being changed, it is good to have one last minor version release(v1.3.0) before migration.

Kotlin IllegalAccessError Problem

I got IllegalAccessError when my RecyclerAdapter is Kotlin.
It says "Illegal class access", "declaration of 'My Adapter Class' appears in ...base.apk:classes2.dex"

But when I change my class to java, It works fine.

java.lang.IllegalAccessError: Illegal class access: 'cupid.android.ui.adapter.HomeFragmentAdapter' attempting to access 'com.ahamed.multiviewadapter.BaseDataManager' (declaration of 'cupid.android.ui.adapter.HomeFragmentAdapter' appears in /data/app/cupid.android-1/base.apk:classes2.dex)
                                                                 at cupid.android.ui.adapter.HomeFragmentAdapter.<init>(HomeFragmentAdapter.kt:20)
                                                                 at cupid.android.ui.screen.activity.main.fragment.home.HomeFragmentLayout.createView(HomeFragmentLayout.kt:20)
                                                                 at cupid.android.ui.screen.activity.main.fragment.home.HomeFragmentLayout.createView(HomeFragmentLayout.kt:13)
                                                                 at cupid.android.ui.base.BaseFragmentLayout.view(BaseFragmentLayout.kt:12)
                                                                 at cupid.android.ui.screen.activity.main.fragment.home.HomeFragment.onCreateView(HomeFragment.kt:37)
                                                                 at android.support.v4.app.Fragment.performCreateView(Fragment.java:2337)
                                                                 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1418)
                                                                 at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1739)
                                                                 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1808)
                                                                 at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
                                                                 at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2579)
                                                                 at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2366)
                                                                 at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2321)
                                                                 at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2198)
                                                                 at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:651)
                                                                 at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:167)
                                                                 at android.support.v4.view.ViewPager.populate(ViewPager.java:1236)
                                                                 at android.support.v4.view.ViewPager.populate(ViewPager.java:1084)
                                                                 at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1614)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
                                                                 at android.support.design.widget.HeaderScrollingViewBehavior.onMeasureChild(HeaderScrollingViewBehavior.java:91)
                                                                 at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onMeasureChild(AppBarLayout.java:1362)
                                                                 at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:784)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                 at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                 at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                 at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
                                                                 at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
                                                                 at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
                                                                 at android.view.View.measure(View.java:19857)
                                                                 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083)
                                                                 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
                                                                 at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689)
                                                                 at android.view.View.measure(View.java:19857)
07-06 04:36:31.822 8493-8493/cupid.android E/AndroidRuntime:     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2275)
                                                                 at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1366)
                                                                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1619)
                                                                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                 at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
                                                                 at android.os.Handler.handleCallback(Handler.java:751)
                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                 at android.os.Looper.loop(Looper.java:154)
                                                                 at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

AndroidX Support

Since AndroidX packages are now out of beta, its time to add support for new packages. Since this requires a major refactor, my current plan is to release it with v2 refactor.

I would like to make a suggestion

1.

/**

  • Denotes that the item is lies in the middle of the grid
    */
    int POSITION_RIGHT = 4;

/**

  • Denotes that the item is lies in the right edge of the grid
    */
    int POSITION_BOTTOM = 8;

/**

  • Denotes that the item is lies in the bottom edge of the grid
    */
    int POSITION_MIDDLE = 0;

why the POSITION_RIGHT ‘s note is rigth ?
this is a accident mistake or this have other meaning?

2.

Can you provide a demo about in a RecyclerView with Grid hava different item and different SpanCount ?
I have read ComplexListActivity ,but This is not what I want。
https://github.com/DevAhamed/MultiViewAdapter/wiki/Grid-Adapter about specific demo!

Best blessing!
thank you very much!

sticky group headers

are there any plans to implement a "sticky headers feature" to expandable group headers?

Multipleviews

Hi @DevAhamed,

I was reading the Multiple Data Sets section on the wiki and I wonder if it is possible to add a header view for each data set?

Also in this example I see that there are two separate list. How can we do if we have one list with different kind of views? (Ex.: a newsfeed where one item is a photo item, one a simple text item and they have different layouts)

Thank you.

IndexOutOfBoundsException when expanding group item

In the sample app, when expanding items in 'Expanding group' page, IndexOutOfBoundsException thrown:

IndexOutOfBoundsException
FATAL EXCEPTION: main
  Process: com.ahamed.sample, PID: 24672
  java.lang.IndexOutOfBoundsException: Index: 10, Size: 10
  at java.util.ArrayList.get(ArrayList.java:411)
  at com.ahamed.multiviewadapter.BaseDataManager.getItem(BaseDataManager.java:316)
  at com.ahamed.multiviewadapter.BaseDataManager.get(BaseDataManager.java:210)
  at com.ahamed.multiviewadapter.CoreRecyclerAdapter.onBindViewHolder(CoreRecyclerAdapter.java:116)
  at com.ahamed.multiviewadapter.CoreRecyclerAdapter.onBindViewHolder(CoreRecyclerAdapter.java:35)
  ...

RFE Support for cursors and the Loader Pattern

It would be really nice to be able to use the Loader pattern with cursors.

I have a CursorRecyclerViewAdapter implementation that i might be able to adapt but I don't want to bother if there is already something in the works.

Removing DataItemBinders from Adapter

This library was very useful to me. Thank a lot!
Just wanted to know is there any way to remove a registered binder from recyclerAdapter dynamically?

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.