diff --git a/app/src/main/java/com/github/nitrico/mystickyscrollview/MainActivity.java b/app/src/main/java/com/github/nitrico/mystickyscrollview/MainActivity.java index cd91d27..d624d2e 100644 --- a/app/src/main/java/com/github/nitrico/mystickyscrollview/MainActivity.java +++ b/app/src/main/java/com/github/nitrico/mystickyscrollview/MainActivity.java @@ -1,6 +1,7 @@ package com.github.nitrico.mystickyscrollview; import android.os.Bundle; +import android.support.design.widget.TabLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -32,6 +33,8 @@ protected void onCreate(Bundle savedInstanceState) { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); + initTabLayout(); + RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler); recycler.setNestedScrollingEnabled(false); recycler.setLayoutManager(new LinearLayoutManager(this)); @@ -43,6 +46,22 @@ protected void onCreate(Bundle savedInstanceState) { sticky.addOnStickyScrollViewListener(this); } + private void initTabLayout() { + TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_header); + + TabLayout.Tab tab = tabLayout.newTab(); + tab.setText("First"); + tabLayout.addTab(tab); + + tab = tabLayout.newTab(); + tab.setText("Second"); + tabLayout.addTab(tab); + + tab = tabLayout.newTab(); + tab.setText("Third"); + tabLayout.addTab(tab); + } + @Override public void onScrollChanged(int x, int y, int oldX, int oldY) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 09dde4e..b581d06 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -15,7 +15,7 @@ android:layout_height="match_parent" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" - app:layout_scrollFlags="scroll|exitUntilCollapsed" + app:layout_scrollFlags="scroll|snap|exitUntilCollapsed" app:title="@string/app_name"> - + android:orientation="vertical"> + + + + + + + + + + + + + diff --git a/stickyscrollview/src/main/java/com/github/nitrico/stickyscrollview/StickyScrollView.java b/stickyscrollview/src/main/java/com/github/nitrico/stickyscrollview/StickyScrollView.java index b066784..34f195c 100644 --- a/stickyscrollview/src/main/java/com/github/nitrico/stickyscrollview/StickyScrollView.java +++ b/stickyscrollview/src/main/java/com/github/nitrico/stickyscrollview/StickyScrollView.java @@ -11,6 +11,7 @@ import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; + import java.util.ArrayList; @Keep @@ -300,7 +301,7 @@ private void doTheStickyThing() { if (viewTop <= 0) { if (viewThatShouldStick == null || viewTop > (getTopForViewRelativeOnlyChild(viewThatShouldStick) - - getScrollY() + (clippingToPadding ? 0 : getPaddingTop()))) { + - getScrollY() + (clippingToPadding ? 0 : getPaddingTop()))) { viewThatShouldStick = v; } } else { @@ -365,22 +366,20 @@ private void notifyHierarchyChanged() { } private void findStickyViews(View v) { - if (v instanceof ViewGroup) { + if (!detainStickyView(v) && (v instanceof ViewGroup)) { ViewGroup vg = (ViewGroup) v; - for (int i = 0; i < vg.getChildCount(); i++) { - String tag = getStringTagForView(vg.getChildAt(i)); - if (tag != null && tag.contains(STICKY_TAG)) { - stickyViews.add(vg.getChildAt(i)); - } else if (vg.getChildAt(i) instanceof ViewGroup) { - findStickyViews(vg.getChildAt(i)); - } - } - } else { - String tag = (String) v.getTag(); - if (tag != null && tag.contains(STICKY_TAG)) { - stickyViews.add(v); - } + for (int i = 0; i < vg.getChildCount(); i++) + findStickyViews(vg.getChildAt(i)); + } + } + + private boolean detainStickyView(View view) { + String tag = getStringTagForView(view); + if (tag.contains(STICKY_TAG)) { + stickyViews.add(view); + return true; } + return false; } private String getStringTagForView(View v) {