Git Product home page Git Product logo

Comments (6)

mandybess avatar mandybess commented on August 20, 2024

hi @IlanVokov ! What Fragment lifecycle call backs were you trying??

from expandable-recycler-view.

IlanVokov avatar IlanVokov commented on August 20, 2024

onSaveInstanceState to save as you do, and there is no onRestoreInstanceState in fragment so i try inside onCreateView

from expandable-recycler-view.

l2dev avatar l2dev commented on August 20, 2024

I know I'm a little late but today I managed to sort this problem out so thought it would be good to share the solution.

So basically the idea is in onCreate method to either load items list from a savedInstance between rotation changes OR if app was launched first time, savedInstance will be null so fragment needs to retrieve items ist from network.

in onCreate method you either load your itemsList from savedInstance or network.

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
itemsList = savedInstanceState.getSerializable("ITEMS");
adapter = new Adapter(itemsList);
adapter.onRestoreInstanceState(savedInstanceState);
} else {
//Do your network calls, retrieve items list and instantiate adapter 
}

In onCreateView you bind your adapter to recyclerView.

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//Inflate view, create recyclerView/Adapter references
//Create adapter by using itemsList (either retrieved from network or from your savedInstance)
//Bind adapter to recyclerView
}

In onViewStateRestored you just tell your adapter to to refresh the view with your saved itemsList

    @Override
    public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
        super.onViewStateRestored(savedInstanceState);
        if (savedInstanceState != null)
            adapter.onRestoreInstanceState(savedInstanceState);
    }

in onSaveInstance you save your current itemsList during fragment/rotation changes

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        adapter.onSaveInstanceState(outState);
        outState.putSerializable("ITEMS", itemsList);
    }

And that's about it. Also I noticed if I navigate from this current fragment (let's call it fragment A) by using '.replace' (in your FragmentManager) to a Fragment B, then if in Fragment B I use 'popBackStack' it will bring me back to Fragment A and the previous state will be restored again! Which is perfect for me because I wanted to save expanded list state throughout rotation changes as well as fragment navigation changes.

Also don't be afraid to override all lifecycle methods called in fragment and print out logs. That really helped me do understand the lifecycle flow and where to make changes.

Reference which might help: https://developer.android.com/guide/components/fragments#Design

from expandable-recycler-view.

haiminhtran810 avatar haiminhtran810 commented on August 20, 2024

Sorry, Can you question ?
About lost state when ExpandableRecycleview scrolls then All it`values will be wrong.
Example
When 1 item VISIBLE or GONE . when I scroll . VISIBLE AND GONE wrong.
Thankyou

from expandable-recycler-view.

l2dev avatar l2dev commented on August 20, 2024

@haiminhtran810 Sorry I dont understand. Ask your friend who speaks english to clarify.

from expandable-recycler-view.

haiminhtran810 avatar haiminhtran810 commented on August 20, 2024

@eurbon Sorry you
I encountered a case that when I scroll down/up it loses state
For example :
I have a List (1: visible , 2 visible,3 visible, 4 visible, 5 visible, 6 invisible)
I have a layout_item_parent
Include :
ImageView ( invisible or visible ) and TextView.
But when I dont scroll, Imageview is visible . Then I scroll down then i scroll up. Show ImageView wrong
It change to visible to Invisible
Sorry you. My weak English

from expandable-recycler-view.

Related Issues (20)

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.