etsy / AndroidStaggeredGrid

An Android staggered grid view which supports multiple columns with rows of varying sizes.
https://github.com/etsy/AndroidStaggeredGrid
4.76k stars 1.13k forks source link

When the device is rotated, listview was overlapped. #184

Open kyungin-park opened 9 years ago

kyungin-park commented 9 years ago

I used the column count "2" for both of portrait and landscape. When the device is rotated, listview was overlapped. I finally found what is the cause of the problem and I am sharing with you guys to prevent having the same problem.

On StaggeredGridView.java file,

 //////////// I added mIsRotated variable below.
private boolean mIsRotated = false;

@Override
protected void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mIsRotated = true;
}

@Override
protected void onSizeChanged(int w, int h) {
    ...............
    //////////// I checked mIsRotated variable instead of mColumnCount.
    // if (mColumnCount != newColumnCount) {
            if(mIsRotated) {
        ............
                   requestLayout();
        //////////// I added code below after layout changes.
                    mIsRotated = false;
    }
}
yamila-fraiman commented 9 years ago

Set column_count attribute for the two orientations instead of setting it once: E.g.: staggered:column_count_landscape="4" staggered:column_count_portrait="2"

kyungin-park commented 9 years ago

I needed to set 2 for both of them(portrait, landscape). That's the reason why I modified the code...

mrdjohnson commented 8 years ago

@kyungin-park it sounds like you found a fix for the the overlapping rotation issue. I attempted a CustomStaggeredGridView with your changes, but it does not seem to work, was the code you posted complete or was there more to it, are there further instructions?

kyungin-park commented 8 years ago

@DocJava In my case, the code I mentioned was enough to solve this problem... Hmm... The cause was that requestLayout() should be called after rotation....