Code Monkey home page Code Monkey logo

stickygridheaders's People

Contributors

caguilar187 avatar dmitry-zaitsev avatar hoeggi avatar mpfeiffermway avatar terrasea avatar tolbkni avatar tonicartos 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  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

stickygridheaders's Issues

Getting nullpointerexception some times when I scroll the list

06-26 14:06:20.792: E/AndroidRuntime(13461): FATAL EXCEPTION: main
06-26 14:06:20.792: E/AndroidRuntime(13461): java.lang.NullPointerException
06-26 14:06:20.792: E/AndroidRuntime(13461): at de.dvse.custom.gridview.StickyGridHeadersBaseAdapterWrapper$ReferenceView.forceRowMeasurement(StickyGridHeadersBaseAdapterWrapper.java:556)
06-26 14:06:20.792: E/AndroidRuntime(13461): at de.dvse.custom.gridview.StickyGridHeadersBaseAdapterWrapper$ReferenceView.onMeasure(StickyGridHeadersBaseAdapterWrapper.java:579)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.View.measure(View.java:15518)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.GridView.setupChild(GridView.java:1417)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.GridView.makeAndAddView(GridView.java:1344)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.GridView.makeRow(GridView.java:341)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.GridView.fillUp(GridView.java:382)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.GridView.fillGap(GridView.java:258)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4930)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3087)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3361)
06-26 14:06:20.792: E/AndroidRuntime(13461): at de.dvse.custom.gridview.StickyGridHeadersGridView.onTouchEvent(StickyGridHeadersGridView.java:344)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.View.dispatchTouchEvent(View.java:7246)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
06-26 14:06:20.792: E/AndroidRuntime(13461): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2211)
06-26 14:06:20.792: E/AndroidRuntime(13461): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1458)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
06-26 14:06:20.792: E/AndroidRuntime(13461): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2159)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.View.dispatchPointerEvent(View.java:7426)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4342)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4382)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.Choreographer.doFrame(Choreographer.java:530)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.os.Handler.handleCallback(Handler.java:725)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.os.Handler.dispatchMessage(Handler.java:92)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.os.Looper.loop(Looper.java:137)
06-26 14:06:20.792: E/AndroidRuntime(13461): at android.app.ActivityThread.main(ActivityThread.java:5226)
06-26 14:06:20.792: E/AndroidRuntime(13461): at java.lang.reflect.Method.invokeNative(Native Method)
06-26 14:06:20.792: E/AndroidRuntime(13461): at java.lang.reflect.Method.invoke(Method.java:511)
06-26 14:06:20.792: E/AndroidRuntime(13461): at com.android.int
06-26 14:06:22.785: E/Trace(15884): error opening trace file: No such file or directory (2)

Catch click on ImageButton at Header Item.

Hi again,
I have StickyGridHeadersGridView, this gridView have Header with ImageButton on it.
I try to catch ImageButton Click Event by using ImageButton.setOnClickListener but it is not working.
I see header have method setOnHeaderClickListener, but it isn't suitable for me.
So I have a question: Where are ability to catch ImageButton click event?

Thanks.

Position in onItemClick is position + 1 row

Inside "onItemClick(AdapterView<?> Grid_sdcard, View v, int position, long id) {}"
I get the position plus one row, I"m guessing it's because the header takes on row. I would minus one row but I'm using android:numColumns="auto_fit" in my xml and the method to get the number of items in a row is only starting at API 16. What can I do to get the correct position?

Inflate header view from RelativeLayout error

I created GridView adapter that extends from ArrayAdapter and implements StickyGridHeadersBaseAdapter. When I try to inflate header view in getHeaderView() method,from layout that rooted from RelativeLayout. I took next error:

03-26 14:38:57.026: E/AndroidRuntime(19113): FATAL EXCEPTION: main
03-26 14:38:57.026: E/AndroidRuntime(19113): java.lang.NullPointerException
03-26 14:38:57.026: E/AndroidRuntime(19113):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:472)
03-26 14:38:57.026: E/AndroidRuntime(19113):    at android.view.View.measure(View.java:12773)
03-26 14:38:57.026: E/AndroidRuntime(19113):    at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper$HeaderFillerView.onMeasure(StickyGridHeadersBaseAdapterWrapper.java:393)

The problem occurs when you I call in StickyGridHeadersBaseAdapterWrapper

v.measure(MeasureSpec.makeMeasureSpec(mHeaderWidth, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

Then I change RelativeLayout to LinearLayout and it's works fine. To test I used device with android 4.0.3.

Recycled bitmap exception

Hi!

I have been using your StickyGridHeaders for a while, and I have now 1.000 or 2.000 users. When they open the gridview with headers randomly app crashes because of:

java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@406b64a8
1
at android.graphics.Canvas.throwIfRecycled(Canvas.java:955)
2
at android.graphics.Canvas.drawBitmap(Canvas.java:1044)
3
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:325)
4
at android.widget.ImageView.onDraw(ImageView.java:872)
5
at android.view.View.draw(View.java:6933)
6
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
7
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
8
at android.view.View.draw(View.java:6936)
9
at android.widget.FrameLayout.draw(FrameLayout.java:357)
10
at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
11
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
12
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
13
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
14
at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
15
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
16
at android.view.View.buildDrawingCache(View.java:6693)
17
at android.view.View.getDrawingCache(View.java:6481)
18
at android.view.ViewGroup.drawChild(ViewGroup.java:1571)
19
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
20
at android.widget.AbsListView.dispatchDraw(AbsListView.java:1627)
21
at android.widget.GridView.dispatchDraw(GridView.java:1943)
22
at com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView.dispatchDraw(StickyGridHeadersGridView.java:689)

It happens about 1% of the times. I don't want to remove recycles because it's bad for memory usage.

Thanks in advance,

Regards

Recycled bitmap exception

Hi TonicArtos,

I just posted this issue #44 a couple of days ago. As you said, I updated StickyGridHeaders to the last version and we launched a release 3 days ago.. In despite of that, I still receive this crash frecuently.

Please help me with this, if you need more details please tell me.

Thanks in advance!!!

Visual artifact: fast scroll appearing on the left side

I enable fast scrolling for your grid view. When scrolling completely down, the fast scrolling indicator jumps to the left side. Any idea what could be causing this? Something between 1.0.1 and your current latest snapshot must have changed.

See also UweTrottmann/SeriesGuide#316 for a screenshot.

Background: I updated to your latest snapshot to fix some drawing issues (black patches/backgrounds) when building with gradle for Android 4.3.

Possible to update list headers after interaction with list items?

Hi!
Is it possible to update a specific header without notify the adapter? if I notify the adapter, the fade out on the selector wont work...

I have tried saving the headers in a array but seams like the header when it is in its normal place and when its sticky isn't the same view...

Best regards!

NullPointerException in StickyGridHeadersBaseAdapterWrapper

In my app google play console reports me that trace

java.lang.NullPointerException
at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.getView(StickyGridHeadersBaseAdapterWrapper.java:193)
at android.widget.AbsListView.obtainView(AbsListView.java:2465)
at android.widget.GridView.makeAndAddView(GridView.java:1331)
at android.widget.GridView.makeRow(GridView.java:331)
at android.widget.GridView.fillSelection(GridView.java:440)
at android.widget.GridView.layoutChildren(GridView.java:1214)
at android.widget.GridView.commonKey(GridView.java:1527)
at android.widget.GridView.onKeyDown(GridView.java:1508)
at android.view.KeyEvent.dispatch(KeyEvent.java:2705)
at android.view.View.dispatchKeyEvent(View.java:7234)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1359)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.support.v4.view.ViewPager.dispatchKeyEvent(ViewPager.java:2383)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1363)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2106)
at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1466)
at android.app.Activity.dispatchKeyEvent(Activity.java:2426)
at com.actionbarsherlock.app.SherlockFragmentActivity.dispatchKeyEvent(SherlockFragmentActivity.java:122)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2033)
at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3852)
at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3800)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4921)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
at dalvik.system.NativeStart.main(Native Method)

NPE when using an Animation on a View

I use this code inside getView to animate the deletion of an item from my Adapter (extends BaseAdapter implements StickyGridHeadersBaseAdapter):

final View myView = holder.root; // Any view from the inflated item layout

holder.Deletebtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Animation anim = AnimationUtils.loadAnimation(ctx,
                    android.R.anim.slide_out_right);

            anim.setAnimationListener(new Animation.AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationRepeat(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {

                    removeTheItemFromTheUnderlyingListOfItems(); 
                    notifyDataSetChanged(); 

                }
            });

            myView.startAnimation(anim);

        }
    });

This works when setting

StickyGridHeadersGridView gv = ...
gv.setAreHeadersSticky(false); 

else it fails with:

FATAL EXCEPTION: main
java.lang.NullPointerException
at com.tonicartos.widget.stickygridheaders.StickyGridHeadersGridView.dispatchDraw(StickyGridHeadersGridView.java:748)
at android.view.View.draw(View.java:11180)
at android.widget.AbsListView.draw(AbsListView.java:3769)

I don't know if this is a bug or I'm doing something wrong, but my code works for standard GridViews and ListViews.

AbsListView.CHOICE_MODE_MULTIPLE is not working

Hi,

If I enable that value, the cells are not being checked properly. Using a regular GridView works with this.
I'm trying to find what of the methods you override is breaking that behavior, but just in case this is a limitation we can not go around.

transparent header item

This project is excellent!

Would you add a new option to make the header item as transparent-able so users could see item under the header view when scrolling?

IGNORE_ITEM_VIEW_TYPE is not respected by StickyGridHeadersBaseAdapterWrapper

I run into this problem when trying to integrate StickyGridHeaders with CWAC EndlessAdapter. It uses a constant viewtype IGNORE_ITEM_VIEW_TYPE for the pending view. The problem is this constant has a value of -1, and because how getItemViewType() in StickyGridHeadersBaseAdapterWrapper is implemented, it may collide with a value for VIEW_TYPE_FILLER or VIEW_TYPE_HEADER:

return mDelegate.getItemViewType(adapterPosition.mPosition) + sNumViewTypes;

(it's not really meant for negative viewtype values)

clickeable headers

currently i set a click listener on header inside the adapter but has no effect

Header height incorrect when using images

Hi TonicArtos, I have headers that consist of a an imageview and two textviews, where the image is loaded asynchronously using Picasso. It seems that the height of the header is being calculated before the image loads making it smaller then it should be. When the image does load, it pushes the textviews out of the header. Scrolling past the header and back up corrects the height. I'd appreciate any help with getting the header displayed correctly the first time, let me know if you need more details.

Thanks!

StickyGridHeadersSimpleAdapterWrapper does not delegate several view types

For list adapter that have several view types, the wrong convertview is returned.

Add this methods to the wrapper to fix it:

@Override
public int getViewTypeCount() {
    return mDelegate.getViewTypeCount();
}

@Override
public int getItemViewType(int position) {
    return mDelegate.getItemViewType(position);
}

Rgds
mike

Crash when using ActionBar-PullToRefresh library

I'm trying to use this library https://github.com/chrisbanes/ActionBar-PullToRefresh and it crashes when using it with StickyGridHeaders GridView.
This is the crash
java.lang.ClassCastException: com.mcohnen.android.layout.SquareRelativeLayout cannot be cast to com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper$HeaderFillerView

SquareRelativeLayout is the class of my cell in the grid. It looks like pullBarToRefresh might be removing some child view that StickyGrid expects...

Position on setMultiChoiceModeListener

l.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
@OverRide
public void onItemCheckedStateChanged(ActionMode mode, int position,
long id, boolean checked) {
}
it seems that position is not giving the right item, (its considering the headers).

Unused Resources

The library contains a values/strings.xml and launcher icon which are not needed and shouldn't be included.

Scroll is not so smooth as on regular GridView

I've noticed the issue when i tried to apply StickyGridHeadersGridView to show image thumbnails in the grid with categories like this
image
The scroll is slower and not so smooth in compare with regular GridView. It happens even if i use standard adapter without headers.
Is there any workarounds for this? Thanks

Android 2.x issue

I have this issue only on Android 2.3.6 (tested on Samsung GT-S536), on Android 4.2 (Galaxy Nexus, HTC Desire C) everything seems to work fine.

Here's the issue:

I have a simple headerView which is just a layout with TextView on it. Layout displays correctly (it has some background) but it is missing a TextView (even though the TextView has some text hardcoded in it). So what I get is only a row with background and text is missing but TextView's background is visible.

There is also this second issue when I start scrolling down, the sticky header that stays on the top of scrollable gridview is becoming dimmer.

Both issues happen only on Android 2.3.6 (tested on Samsung GT-S536)

@Override
        public View getHeaderView(int position, View convertView,
                ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View headerView = inflater
                    .inflate(mHeaderResourceId, parent, false);
            return headerView;
        }

Scroll to position

If I want to scroll to any gridview item using gridView.setSelection(scrolToIndex);
position goes to some item unrelated with it.

StickyGridHeadersBaseAdapter issue

Hey,
first of all i want to thank you for this library.
I have an issue that i'm trying to extend StickyGridHeadersBaseAdapter and it's not fill the grid view with data.

in the main activity that's the grid view:

StickyGridHeadersGridView gridView = (StickyGridHeadersGridView)findViewById(R.id.asset_grid);

the adapter impleaments:
StickyGridHeadersBaseAdapter
but it never get into getView.

can please guide through this.
Thanks!

get array index out of bound exception

Hey,
I have a vector with three element. and two headers.
the data is correct but the adapter call to getView with position 3 - position that does not exist.

thank's in advance to all who can help.

the exception i get is:
07-18 01:36:04.574: E/AndroidRuntime(27942): FATAL EXCEPTION: main
07-18 01:36:04.574: E/AndroidRuntime(27942): java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
07-18 01:36:04.574: E/AndroidRuntime(27942): at java.util.Vector.arrayIndexOutOfBoundsException(Vector.java:907)
07-18 01:36:04.574: E/AndroidRuntime(27942): at java.util.Vector.elementAt(Vector.java:328)
07-18 01:36:04.574: E/AndroidRuntime(27942): at java.util.Vector.get(Vector.java:442)
07-18 01:36:04.574: E/AndroidRuntime(27942): at fragments.SalesStickyGVAdapter.getItem(SalesStickyGVAdapter.java:39)
07-18 01:36:04.574: E/AndroidRuntime(27942): at fragments.SalesStickyGVAdapter.getView(SalesStickyGVAdapter.java:52)
07-18 01:36:04.574: E/AndroidRuntime(27942): at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.getView(StickyGridHeadersBaseAdapterWrapper.java:179)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.AbsListView.obtainView(AbsListView.java:2159)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.GridView.makeAndAddView(GridView.java:1341)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.GridView.makeRow(GridView.java:341)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.GridView.fillDown(GridView.java:283)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.GridView.fillFromTop(GridView.java:417)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.GridView.layoutChildren(GridView.java:1229)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.AbsListView.onLayout(AbsListView.java:1994)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:653)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.View.layout(View.java:14008)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.Choreographer.doFrame(Choreographer.java:532)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.os.Handler.handleCallback(Handler.java:725)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.os.Handler.dispatchMessage(Handler.java:92)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.os.Looper.loop(Looper.java:137)
07-18 01:36:04.574: E/AndroidRuntime(27942): at android.app.ActivityThread.main(ActivityThread.java:5041)
07-18 01:36:04.574: E/AndroidRuntime(27942): at java.lang.reflect.Method.invokeNative(Native Method)
07-18 01:36:04.574: E/AndroidRuntime(27942): at java.lang.reflect.Method.invoke(Method.java:511)
07-18 01:36:04.574: E/AndroidRuntime(27942): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-18 01:36:04.574: E/AndroidRuntime(27942): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-18 01:36:04.574: E/AndroidRuntime(27942): at dalvik.system.NativeStart.main(Native Method)

my code in the adapter is:

package fragments;

import java.util.Vector;
import robototext.RobotoTextView;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.out.App;
import com.out.goout.R;
import com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapter;

import entitys.SaleObj;

public class SalesStickyGVAdapter extends BaseAdapter implements StickyGridHeadersBaseAdapter
{
private Context mContext;
private Vector items;
private String [] headers;

public SalesStickyGVAdapter(Context mContext, String [] headers, Vector<SaleObj> sales)
{
    this.mContext = mContext;
    this.items = sales;

    this.headers = headers;
}

@Override
public int getCount()
{       
    return items.size();
}

@Override
public SaleObj getItem(int position) 
{   
    return items.get(position);
}

@Override
public long getItemId(int position) 
{       
    return items.get(position).hashCode();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) 
{       
    ChildView holder;
    SaleObj currentSaleObj = getItem(position);

    if(convertView == null)
    {
        holder = new ChildView();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.sale_row_child_layout, null);
        holder.tvPubName = (RobotoTextView)convertView.findViewById(R.id.tv_sale_pub_name);
        holder.tvSaleDescription = (RobotoTextView)convertView.findViewById(R.id.tv_sale_description);

        convertView.setTag(holder);
    }
    else
    {
        holder = (ChildView)convertView.getTag();
    }

    //get the pub name
    holder.tvPubName.setText(App.pubById.get(currentSaleObj.pubSaleRelation.toString()).pubName);
    holder.tvSaleDescription.setText(currentSaleObj.saleDescription);

    return convertView;
}

private class ChildView
{
    private RobotoTextView tvPubName;
    private RobotoTextView tvSaleDescription;
}

@Override
public int getCountForHeader(int position) 
{       
    int RetVal = 0;
    try 
    {
        boolean isSaleTemp = getItem(position).isTemporarySale;
        if(isSaleTemp)
        {
            RetVal = App.salesByType.get(headers[0]).size();
        }
        else
        {
            RetVal = App.salesByType.get(headers[1]).size();
        }
    }
    catch (Exception e) {}
    return RetVal;
}

@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) 
{       
    HeaderView holder;
    String currentHeader = headers[position];
    if(convertView == null)
    {
        holder = new HeaderView();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.sales_header_view, null);
        holder.tvHeader = (RobotoTextView)convertView.findViewById(R.id.tv_header_text);

        convertView.setTag(holder);
    }
    else
    {
        holder = (HeaderView)convertView.getTag();
    }

    holder.tvHeader.setText(currentHeader);     

    return convertView;
}

private class HeaderView
{
    private RobotoTextView tvHeader;
}

@Override
public int getNumHeaders() 
{       
    int RetVal = 0;
    try 
    {
        RetVal = App.salesByType.keySet().size();
    }
    catch (Exception e) {}
    return RetVal;
}

}

Consider Making a Jar

Library projects for Android suck. After #20, the only remaining resource is the custom attribute denoting whether or not headers are sticky. In working on StickyListHeaders I make this a programmatic API only so that the project could be distributed as a .jar. It would be a great addition to this library if it were distributable as a .jar rather than a library project.

SectionIndexer

SectionIndexer doesn`t work with this library..

It doesn`t show up.

adapter.notifyDataSetChanged() bug...

calling adapter.notifyDataSetChanged() when a header is "sticky", the sticky header will disappear and wont get redrawn until a new header becomes sticky...

ImageViews receive onDetachedFromWindow premuturely

I've investigated using this library in concert with the Image loading capabilities provided in the sample code from Google found here: http://developer.android.com/training/displaying-bitmaps/

When I tested it out, I observed that when using this implementation of the GridView with items that use the RecyclingImageView from the samples (which are used to preserve memory,especially on 2.3.x) the onDetachedFromWindow method on the RecyclingImageView is called prematurely. This prevents images from displaying their bitmaps properly. I haven't pinpointed the root cause in the library, but I can confirm this does not occur with the standard Grid view. I traced it down to being related to how the getView method works when wrapping the standard wrapper: https://github.com/TonicArtos/StickyGridHeaders/blob/master/Library/src/com/tonicartos/widget/stickygridheaders/StickyGridHeadersBaseAdapterWrapper.java#L158

It looks like the measuring for each row is instantiating the wrapped Adapter's item perhaps more than once, leading to the detached calls.

Has anyone else seen this, or have any better understanding than I do of why this happens? If you need a sample project, I could probably whip that up (I basically just modified the BitmapFun sample to use this library).

wrong mNumColumns

When setting android:numColumns in XML, in a StickyGridHeadersGridView instance, the value is well setted in method setNumColumns() (value matches the one in XML)

But when arrived in scrollChanged(), mNumColumns is back to 1, which cause strange display behavior on the list.

A workaround is to call
gridView.setNumColumns(...) just after inflating StickyGridHeadersGridView from XML

Custom StickyGridHeadersBaseAdapter

Hi
I'm trying to implement my own StickyGridHeadersBaseAdapter, my current source code here - http://paste.org.ru/?11jrjh, and I use it like
ModeAdapter adapter = new ModeAdapter(this);
modeGridView.setAdapter(adapter);

Problems which I have is that

  1. I have no idea how to call notifyDataSetChanged() for this adapter, so I can't change items
  2. And implementation of AdapterView.OnItemClickListener (http://paste.org.ru/?mvgt7b) works strange
    Mode mode = (Mode) adapter.getItem(position);
    returns null for items with 1st and 2nd positions, item on 3rd position is actual 1st item in adapter.
    Where is my fault here?
    One more question is why I can't cast adapterView.getAdapter() in my OnItemClickListener to my "ModeAdapter" class. What if I want to call notifyDataSetChanged() here?
    I didn't find any examples for custom implementation of StickyGridHeadersBaseAdapter here.

Thanks in advance.

Orientation bug...

Hi!
Feel like I am spamming you haha...
When I change orientation, the sticky headers wont resize properly to adapt to the new screen width...

header problem with android:verticalSpacing...

Hi!
If you scroll the list slowly and just after a header pushes away a other header you will see that above header flashes for a short while... this only happens when using android:verticalSpacing...

I have written this in a earlier thread but now I add it to a own thread! :)

ClassCastException

Hi!

I have been using StickyGridHeaders for a month, and it works great, but randomly when I load the gridview I get an exception like this.

0 java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper$FillerView
1 at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.getFillerView(StickyGridHeadersBaseAdapterWrapper.java:261)
2 at com.tonicartos.widget.stickygridheaders.StickyGridHeadersBaseAdapterWrapper.getView(StickyGridHeadersBaseAdapterWrapper.java:177)
3 at android.widget.AbsListView.obtainView(AbsListView.java:2597)
4 at android.widget.GridView.makeAndAddView(GridView.java:1344)
5 at android.widget.GridView.makeRow(GridView.java:344)
6 at android.widget.GridView.fillSpecific(GridView.java:546)
7 at android.widget.GridView.layoutChildren(GridView.java:1243)
8 at android.widget.AbsListView.onLayout(AbsListView.java:2431)
9 at android.view.View.layout(View.java:14482)
10 at android.view.ViewGroup.layout(ViewGroup.java:4469)
11 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
12 at android.view.View.layout(View.java:14482)
13 at android.view.ViewGroup.layout(ViewGroup.java:4469)
14 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
15 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
16 at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
17 at android.view.View.layout(View.java:14482)
18 at android.view.ViewGroup.layout(ViewGroup.java:4469)
19 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
20 at android.view.View.layout(View.java:14482)
21 at android.view.ViewGroup.layout(ViewGroup.java:4469)
22 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
23 at android.view.View.layout(View.java:14482)
24 at android.view.ViewGroup.layout(ViewGroup.java:4469)
25 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
26 at android.view.View.layout(View.java:14482)
27 at android.view.ViewGroup.layout(ViewGroup.java:4469)
28 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
29 at android.view.View.layout(View.java:14482)
30 at android.view.ViewGroup.layout(ViewGroup.java:4469)
31 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
32 at android.view.View.layout(View.java:14482)
33 at android.view.ViewGroup.layout(ViewGroup.java:4469)
34 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
35 at android.view.View.layout(View.java:14482)
36 at android.view.ViewGroup.layout(ViewGroup.java:4469)
37 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
38 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
39 at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
40 at android.view.View.layout(View.java:14482)
41 at android.view.ViewGroup.layout(ViewGroup.java:4469)
42 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
43 at android.view.View.layout(View.java:14482)
44 at android.view.ViewGroup.layout(ViewGroup.java:4469)
45 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
46 at android.view.View.layout(View.java:14482)
47 at android.view.ViewGroup.layout(ViewGroup.java:4469)
48 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
49 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
50 at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
51 at android.view.View.layout(View.java:14482)
52 at android.view.ViewGroup.layout(ViewGroup.java:4469)
53 at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
54 at android.view.View.layout(View.java:14482)
55 at android.view.ViewGroup.layout(ViewGroup.java:4469)
56 at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2147)
57 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1966)
58 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1179)
59 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4861)
60 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
61 at android.view.Choreographer.doCallbacks(Choreographer.java:562)
62 at android.view.Choreographer.doFrame(Choreographer.java:532)
63 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
64 at android.os.Handler.handleCallback(Handler.java:725)
65 at android.os.Handler.dispatchMessage(Handler.java:92)
66 at android.os.Looper.loop(Looper.java:137)
67 at android.app.ActivityThread.main(ActivityThread.java:5293)
68 at java.lang.reflect.Method.invokeNative(Native Method)
69 at java.lang.reflect.Method.invoke(Method.java:511)
70 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
71 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
72 at dalvik.system.NativeStart.main(Native Method)

May I'm doing something wrong, but is weird I cannot replicate this error easily, just happens.

Thanks in advance for any help!

How to make header invisible or gone

Hello i'm trying to make a single o multiple headers invisible or gone via View.setVisibility(int);. But changing this won't affect it in any way, so it keeps showing all headers. Is there a way to do this?

android:verticalSpacing problems...

Hi!
Great library but I have found a bug when using android:verticalSpacing...

On a normal GridView android:verticalSpacing only affect the space between list items and not the top spacing of the first item and bottom spacing of the last item... so in StickyGridHeadersGridView the items in the first row after a sticky header and the items on the row above a header should be affected in the same way... or what do you say about that? :)

Best regards!

Auto-expand the height of the grid view

Would it be possible to auto-expand the height of the grid view? This is for a case where the grid view could be contained within another layout that has content above it. Currently the height of the grid view is never tall enough and it needs to be dynamic.

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.