zhanghai / androidfastscroll Goto Github PK
View Code? Open in Web Editor NEWFast scroll for Android RecyclerView and more
Home Page: https://play.google.com/store/apps/details?id=me.zhanghai.android.fastscroll.sample
License: Apache License 2.0
Fast scroll for Android RecyclerView and more
Home Page: https://play.google.com/store/apps/details?id=me.zhanghai.android.fastscroll.sample
License: Apache License 2.0
RecyclerViewHelper.java中getScrollRange中是通过mView.getPaddingTop() + itemCount * itemHeight + mView.getPaddingBottom();来计算ScrollRange,但是我们实际使用中用到了ConcatAdapter,就是同一个recyclerview中,有多种adapter,每种adapter中,列数是不一样的,而且itemView的高度也是不一样的,所以getScrollRange的计算方法不适用我们这种场景。 请问一下有什么比较好的解决方法吗? 另外,是否有考虑过通过mView.computeVerticalScrollRange()来代替itemCount * itemHeight吗(我这么试过,但是发现算出来的值不是固定的,滑动到底的时候,数值会变化)
The interface PopupTextProvider:
@NonNull <=====
String getPopupText(int position);
But RecyclerViewHelper#getPopupText() accepts that getPopupText(int position) can return null.
i.e. that there is no popup text for that position.
Can I kindly propose you change the interface to
@Nullable <=====
String getPopupText(int position);
Android Studio's error reporting and myself would be grateful :)
I want to custom PopupStyles MD2 textColor is white color in Kotlin (1.3.50). But currently, I can't access Md2PopupBackground because it missing modifier public . Can you make it is public or support a PopupStyles.Builder that allow custom somethings as textColor, backgroundColor...
Cannot access 'Md2PopupBackground': it is public/package/ in 'me.zhanghai.android.fastscroll'
Thanks!
在 Android 10 及 Android 11 上会闪退,闪退日志很奇怪,说是“JNI DETECTED ERROR IN APPLICATION ... java.lang.IllegalStateException: Unable to create layer for View ... ”,分析很久也找不出原因,最后去掉FastScroll的调用才不闪退。
使用这个方案在 Android 10 及 Android 11 上是正常的:https://github.com/Mixiaoxiao/FastScroll-Everywhere
If you try to use FixItemDecorationRecyclerView this will definitely crash with ClassCastException in runtime.
As you can see in the source code:
@Override
protected void dispatchDraw(@NonNull Canvas canvas) {
for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
decor.getItemDecoration().onDraw(canvas, this, decor.getState());
}
super.dispatchDraw(canvas);
for (int i = 0, count = getItemDecorationCount(); i < count; ++i) {
FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
decor.getItemDecoration().onDrawOver(canvas, this, decor.getState());
}
}
@Override
public void addItemDecoration(@NonNull ItemDecoration decor, int index) {
super.addItemDecoration(new FixItemDecoration(decor), index);
}
@NonNull
@Override
public ItemDecoration getItemDecorationAt(int index) {
return ((FixItemDecoration) super.getItemDecorationAt(index)).getItemDecoration();
}
You wrap ItemDecorations into FixItemDecoration (see addItemDecoration method) and then you cast it in such a way FixItemDecoration decor = (FixItemDecoration) getItemDecorationAt(i);
(see dispatchDraw method)
Please fix this.
Hello, I noticed that the FastScroller
class in your library does not provide getter and setter methods to modify the mMinTouchTargetSize
property. Moreover, it is not possible to set this value through the constructor. By default, the value is set to 48dp (<dimen name="afs_min_touch_target_size">48dp</dimen>
), which may not work correctly for different screen sizes and densities.
It would be beneficial to expose methods to adjust the mMinTouchTargetSize
property, allowing developers to fine-tune this value for their specific use cases and ensure a better user experience across various devices.
Possible solution:
mMinTouchTargetSize
in the FastScroller
class.FastScrollerBuilder
class.This improvement would provide better customization options and ensure the library's adaptability to different screen configurations.
Thank you for your attention to this issue, and I appreciate your work on this library.
scroll 很容易误触, 主要是因为在右边的任意地方拖动都可能让scroll
拖动, 有什么办法只让用户点击bar 的位置才能上下拖动 ?
使用的
androidx.recyclerview.selection.SelectionTracker.java
实现的长按选择,滑动滚动条会触发长按事件
研究了下源码,发现滚动条滑动事件监听的recyclerview
me.zhanghai.android.fastscroll.FastScroller.java
private boolean onTouchEvent(@NonNull MotionEvent event) {
if (!mScrollbarEnabled) {
return false;
}
float eventX = event.getX();
float eventY = event.getY();
Rect padding = getPadding();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = eventX;
mDownY = eventY;
if (mTrackView.getAlpha() > 0 && isInView(mTrackView, eventX, eventY)) {
mDragStartY = eventY;
if (isInViewTouchTarget(mThumbView, eventX, eventY)) {
mDragStartThumbOffset = mThumbOffset;
} else {
mDragStartThumbOffset = (int) (eventY - padding.top - mThumbHeight / 2f);
scrollToThumbOffset(mDragStartThumbOffset);
}
setDragging(true);
}
break;
case MotionEvent.ACTION_MOVE:
if (!mDragging && isInViewTouchTarget(mTrackView, mDownX, mDownY)
&& Math.abs(eventY - mDownY) > mTouchSlop) {
if (isInViewTouchTarget(mThumbView, mDownX, mDownY)) {
mDragStartY = mLastY;
mDragStartThumbOffset = mThumbOffset;
} else {
mDragStartY = eventY;
mDragStartThumbOffset = (int) (eventY - padding.top - mThumbHeight / 2f);
scrollToThumbOffset(mDragStartThumbOffset);
}
setDragging(true);
}
if (mDragging) {
int thumbOffset = mDragStartThumbOffset + (int) (eventY - mDragStartY);
scrollToThumbOffset(thumbOffset);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
setDragging(false);
break;
}
mLastY = eventY;
return mDragging;
}
Feature motivation...
I have a left-handed user that would like the scrollbar on the left hand side, even when the text and layouts are in LTR mode.
Ideally, some sort of setting on the FastScrollerBuilder that would eventually cause the onPreDraw to use this override instead view.getLayoutDirection.
You click thumb, it has current behaviour. You click the track outside of thumb and it does not react. One of the examples of expected behavior could be Google Photos fast track.
Thumb follows your click in any track area.
There's no conflict.
When scrolling, item dragging will also be triggered.
RecyclerView
ItemTouchHelper
for RecyclerView
, with up and down dragging enabledTo see a scrollable content with fast-scroller
Almost nothing is shown
1.Just switch to those places and try to scroll
Version:
VERSION=1.1.0
VERSION_CODE=6
Platform:
Android Q but also before.
Fatal Exception: java.lang.ArithmeticException: divide by zero
at me.zhanghai.android.fastscroll.FastScroller.scrollToThumbOffset(FastScroller.java:380)
at me.zhanghai.android.fastscroll.FastScroller.onTouchEvent(FastScroller.java:325)
at me.zhanghai.android.fastscroll.FastScroller.$r8$lambda$rTQcs5gqTpHxYd9ar1i9VccEjvo(FastScroller.java)
at me.zhanghai.android.fastscroll.FastScroller$$InternalSyntheticLambda$0$1818e04b76f0a8b5d0fca4db696fe741088ef0340e11119ee7db05a1ef50bbbd$3.test(FastScroller.java:4)
at me.zhanghai.android.fastscroll.RecyclerViewHelper$3.onTouchEvent(RecyclerViewHelper.java:78)
at androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners(RecyclerView.java:3259)
at androidx.recyclerview.widget.RecyclerView.onTouchEvent(RecyclerView.java:3421)
at android.view.View.dispatchTouchEvent(View.java:15076)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3917)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3581)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3923)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3597)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:1015)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1962)
at android.app.Activity.dispatchTouchEvent(Activity.java:4265)
If I pass scrollview inside FastScrollerBuilder, apps crashes.
FastScrollerBuilder(scrollView).build()
Method getPopupText() in interface PopupTextProvider should return CharSequence instead of String to allow the styling of the text for each individual entry.
Should run flawlessly and show a fast scroller.
Crash on open the screen with the fast scroller.
appcompat:1.6.0-rc01
I am just guessing that the issue is with AppCompat versioning because I encountered this issue after updating to latest library version
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/appcompat/graphics/drawable/DrawableWrapper;
at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:123)
at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:61)
Fast Scrolling up or down doesn't trigger swipe refresh.
Fast Scrolling down triggers SwipeRefresh
Hi Zhang Hai,
I am currently using 1.1.7
I can appreciate your library over AndroidX's RecyclerView's app:fastScrollEnabled
implementation due to
The following is the AndroidX's implementation, which doesn't respect the initial touch point of thumb - https://www.youtube.com/watch?v=c9jkI7ryyoA In AndroidX's example, our initial touch point is the center of the thumb. However, after fast scrolling, our touch point will no longer stay at the center of thumb
Here's the AndroidX's implementation
app:fastScrollEnabled="true"
app:fastScrollVerticalThumbDrawable="@drawable/fast_scroll_thumb_material_light"
app:fastScrollVerticalTrackDrawable="@drawable/fast_scroll_track_material_light"
app:fastScrollHorizontalThumbDrawable="@drawable/fast_scroll_thumb_material_light"
app:fastScrollHorizontalTrackDrawable="@drawable/fast_scroll_track_material_light"
When I port to your library, I am happy to see it
However, it does yield some behaviour, which is previously not seen in AndroidX
When scroll to the top most, the scroll bar will disappear. When scroll to the bottom most, there is an unwanted padding - https://www.youtube.com/watch?v=veIfuR9eUrk
After scroll to the top most and scroll bar disappear, scroll again will produce "jumpy" effect - https://youtu.be/BmJF2nRsGiE
I am using the exact same RecylerView configuration as when I use AndroidX
I do not have any bottom padding, or top padding on the RecyclerView itself.
This is my RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:requiresFadingEdge="none"
android:scrollbars="none"
android:background="?attr/recyclerViewBackground"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingTop="0dp"
android:paddingBottom="0dp" />
and this is the new code I have added
FastScrollerBuilder fastScrollerBuilder = new FastScrollerBuilder(recyclerView);
fastScrollerBuilder.setThumbDrawable(getResources().getDrawable(R.drawable.fast_scroll_thumb_material_light));
fastScrollerBuilder.setTrackDrawable(getResources().getDrawable(R.drawable.fast_scroll_track_material_light));
fastScrollerBuilder.build();
Do you have an idea what might go wrong, and where I can start to debug from?
Thank you very much!
p/s I just realize I am using your materialratingbar library too when I adding your AndroidFastScroll into build.gradle. Thank you!
现在打开界面后会显示,然后1.5s后隐藏,如果按钮太靠近滚动条区域,点击事件就被scrollbar消费了
能否增加一个api可以设置自动隐藏的的时间,和默认隐藏的开关
Hello, I would like to request the addition of a method in the FastScroller
class that allows developers to determine if the fast scroll is currently being displayed. This feature would be helpful in various scenarios where the visibility status of the fast scroll might be needed to adapt the UI or handle specific user interactions.
Suggested implementation:
Please consider adding a method, such as isFastScrollVisible
, to the FastScroller
class that returns a boolean value indicating whether the fast scroll is currently being displayed or not.
This enhancement would provide valuable information about the fast scroll's visibility status and enable developers to make more informed decisions when designing their application's user experience.
Thank you for considering this feature request, and I appreciate your work on this library.
You finish fastscrolling, take your hand out of fastscroller, recyclerview's position stays still.
You finish fastscrolling, take your hand out of fastscroller, recyclerview's position jumps up or down. It maybe no problem when you have only 100-200 elements but when you have 50k-100k you may end 100-200 elements up or down from the original position that you had before taking your hand from fastscroller.
I can provide any info or samples you need.
This is pretty easy to reproduce:
Create a vertical recyclerview with a lot of items (1 page in my project has 3447 items), try fast scrolling to the bottom.
In current data set, thumb will not go lower than position 3433.
Recyclerview item height is set to ?listPreferredItemHeightSmall
Please let me know if need any other info
I would like to know how I can implement PopupTextProvider
in FastScrollNestedScrollView
? The direct child of FastScrollNestedScrollView
is a LinearLayout
, which contains some TextViews and also a nested RecyclerView
(with android:isScrollContainer="false"
). I tried to use
new FastScrollerBuilder(mNestedScrollView).setPopupTextProvider(position -> "some text").build();
But the code "some text" is never called. Any ideas?
When AndroidFastScroll is applied to a RecyclerView that has a SelectionTracker set, using the fast scroller should not lead to rows being selected.
Scrolling randomly selects rows in the RecyclerView.
recyclerView.setSelectionTracker(...)
FastScrollerBuilder(recyclerView).build()
Hi,
I just found your commit 91a796a to fix the android:tint issues at API level 21. But it seems that you did not workaround for afs_thumb_stateful in RecyclerViewListStatefulFragment.java by changing the method call, which can still induce the issue.
It will be jumping between items when fast scrolling though.
JFrog has made the decision to shut down Bintray on May 1st 2021 which means libraries that are only available on JCenter will stop resolving for users. It'd be greatly appreciated if this library is also published to the Sonatype OSS repository so that projects can continue depending on it after JCenter is gone.
Just came accross this on play dev console.
Actually, I don't know how to fix this or how to reproduce. Don't have empty list in my library.
Hope you can mitigate this issue in the lib itself.
java.lang.IndexOutOfBoundsException: | ||||
---|---|---|---|---|
at java.util.ArrayList.get (ArrayList.java:437) | ||||
at androidx.recyclerview.widget.RecyclerView.dispatchOnScrollStateChanged (RecyclerView.java) | ||||
at androidx.recyclerview.widget.RecyclerView.setScrollState (RecyclerView.java) | ||||
at androidx.recyclerview.widget.RecyclerView.stopScrollersInternal (RecyclerView.java) | ||||
at androidx.recyclerview.widget.RecyclerView.stopScroll (RecyclerView.java) | ||||
at me.zhanghai.android.fastscroll.RecyclerViewHelper.scrollTo (RecyclerViewHelper.java) | ||||
at me.zhanghai.android.fastscroll.FastScroller.scrollToThumbOffset (FastScroller.java) | ||||
at me.zhanghai.android.fastscroll.FastScroller.onTouchEvent (FastScroller.java) | ||||
at me.zhanghai.android.fastscroll.FastScroller$InternalSyntheticLambda$1$c3ba0337591b746a24a8e3c1726bb8f9d2ca41c1534fc77679212ad973b1a63d$3.test (FastScroller.java) | ||||
at me.zhanghai.android.fastscroll.RecyclerViewHelper$3.onInterceptTouchEvent (RecyclerViewHelper.java:2) | ||||
at androidx.recyclerview.widget.RecyclerView.findInterceptingOnItemTouchListener (RecyclerView.java:22) | ||||
at androidx.recyclerview.widget.RecyclerView.dispatchToOnItemTouchListeners (RecyclerView.java) | ||||
at androidx.recyclerview.widget.RecyclerView.onTouchEvent (RecyclerView.java) | ||||
at android.view.View.dispatchTouchEvent (View.java:15076) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3917) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3581) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3923) | ||||
at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:3597) | ||||
at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:1015) | ||||
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1962) | ||||
at android.app.Activity.dispatchTouchEvent (Activity.java:4265) | ||||
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:2) | ||||
at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:973) | ||||
at android.view.View.dispatchPointerEvent (View.java:15335) | ||||
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:7794) | ||||
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:7567) | ||||
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6901) | ||||
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6958) | ||||
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6924) | ||||
at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:7122) | ||||
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6932) | ||||
at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:7179) | ||||
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6905) | ||||
at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:6958) | ||||
at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:6924) | ||||
at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:6932) | ||||
at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:6905) | ||||
at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:10354) | ||||
at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:10202) | ||||
at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:10158) | ||||
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:10486) | ||||
at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:259) | ||||
at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents (Native Method) | ||||
at android.view.InputEventReceiver.consumeBatchedInputEvents (InputEventReceiver.java:239) | ||||
at android.view.ViewRootImpl.doConsumeBatchedInput (ViewRootImpl.java:10434) | ||||
at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run (ViewRootImpl.java:10575) | ||||
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:1108) | ||||
at android.view.Choreographer.doCallbacks (Choreographer.java:866) | ||||
at android.view.Choreographer.doFrame (Choreographer.java:789) | ||||
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:1092) | ||||
at android.os.Handler.handleCallback (Handler.java:938) | ||||
at android.os.Handler.dispatchMessage (Handler.java:99) | ||||
at android.os.Looper.loopOnce (Looper.java:226) | ||||
at android.os.Looper.loop (Looper.java:313) | ||||
at android.app.ActivityThread.main (ActivityThread.java:8663) | ||||
at java.lang.reflect.Method.invoke (Native Method) | ||||
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:567) | ||||
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1135) |
I'm using the latest version of the AndroidFastScroll
in conjunction with the FastAdapter
library.
Since I cannot customize the implementation of my adapter class, I would like to have an alternate way of providing a standalone PopupTextProvider
.
How about providing it as an argument to FastScrollerBuilder
? I can suggest a PR if you want...
It should work normally
Compile time error
1.Include this lib in project with minSdk version 19
Manifest merger failed : uses-sdk:minSdkVersion 19 cannot be smaller than version 21 declared in library [me.zhanghai.android.fastscroll:library:1.1.4]
Hello. An unobvious error occurs due to pop-up styles. I can’t understand what the problem is. Here is a sample code:
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
setupRenderer()
}
private fun setupRenderer() {
renderer = IndexedAdapter(DiffCallback())
renderer.apply {
registerRenderer(NotesRenderer())
}
fastScrollRecyclerViewNotes.adapter = renderer
FastScrollerBuilder(fastScrollRecyclerViewNotes)
.useMd2Style()
.build()
fastScrollRecyclerViewNotes.enableVerticalOverScroll()
}
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/fastScrollRecyclerViewNotes"
style="@style/GirdFastScrollList"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/cell_note" />
2020-04-08 16:02:33.275 15964-15964/com.pereved.schedule E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pereved.schedule, PID: 15964
java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34)
at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:113)
at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:59)
at com.pereved.schedule.notes.list.view.NotesListFragment.setupRenderer(NotesListFragment.kt:99)
at com.pereved.schedule.notes.list.view.NotesListFragment.onActivityCreated(NotesListFragment.kt:52)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2717)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: java.lang.ClassCastException: Bootstrap method returned null
at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34)
at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:113)
at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:59)
at com.pereved.schedule.notes.list.view.NotesListFragment.setupRenderer(NotesListFragment.kt:99)
at com.pereved.schedule.notes.list.view.NotesListFragment.onActivityCreated(NotesListFragment.kt:52)
at androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2717)
at androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:346)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1188)
at androidx.fragment.app.FragmentManager.addAddedFragments(FragmentManager.java:2224)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1997)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1953)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Everything works without these lines:
FastScrollerBuilder(fastScrollRecyclerViewNotes)
.useMd2Style()
.build()
In my adapter I override PopupTextProvider but my application fails and I can’t understand what the problem is.. Your library example didn't help me.
The drawable is invisible and the Fastscroll only shows my first letter of the list. What should i be looking at to fix this.
R.drawable.afs_thumb
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
android:tint="?colorControlActivated">
<size
android:width="8dp"
android:height="48dp" />
<solid android:color="@android:color/white" />
</shape>
貌似android:tint问题,但api21是支持tint的
AndroidFastScroll version 1.0.0
My setup
FastScrollerBuilder(recyclerView)
.setTrackDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.afs_md2_track)!!)
.setThumbDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.afs_md2_thumb)!!)
.setPopupStyle(popupStyle)
.build()
private val popupStyle = Consumer<TextView> { popupView ->
PopupStyles.MD2.accept(popupView)
popupView.setTextColor(Color.WHITE)
}
at me.zhanghai.android.fastscroll.Md2PopupBackground.getOutline(Md2PopupBackground.java:142)
Fatal Exception: java.lang.IllegalArgumentException: path must be convex at android.graphics.Outline.setConvexPath(Outline.java:284) at me.zhanghai.android.fastscroll.Md2PopupBackground.getOutline(Md2PopupBackground.java:142) at android.view.ViewOutlineProvider$1.getOutline(ViewOutlineProvider.java:38) at android.view.View.rebuildOutline(View.java:17362) at android.view.View.setBackgroundBounds(View.java:22166) at android.view.View.drawBackground(View.java:22110) at android.view.View.draw(View.java:21872) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.ViewOverlay$OverlayViewGroup.dispatchDraw(ViewOverlay.java:251) at android.view.View.draw(View.java:21896) at androidx.recyclerview.widget.RecyclerView.draw(RecyclerView.java:4429) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at androidx.viewpager.widget.ViewPager.draw(ViewPager.java:2426) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at androidx.coordinatorlayout.widget.CoordinatorLayout.drawChild(CoordinatorLayout.java:1256) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at androidx.drawerlayout.widget.DrawerLayout.drawChild(DrawerLayout.java:1426) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.updateDisplayListIfDirty(View.java:20740) at android.view.View.draw(View.java:21607) at android.view.ViewGroup.drawChild(ViewGroup.java:4558) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4333) at android.view.View.draw(View.java:21884) at com.android.internal.policy.DecorView.draw(DecorView.java:1082) at android.view.View.updateDisplayListIfDirty(View.java:20754) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:725) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:731) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:840) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3947) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3721) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3029) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8511) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) at android.view.Choreographer.doCallbacks(Choreographer.java:761) at android.view.Choreographer.doFrame(Choreographer.java:696) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7050) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
Please do support Staggered gird list.
When changing the layout manager to staggered gird layout manager, fast scroller stops working and just disappears.
Does not work
I want to create a behavior where the fast scroll handle isn't shown on app start but when first scrolling. The goal is to have a cleaner and minimalistic look. Normal hide animation should be uneffected.
Without changing the library itself I came up with the hacky workaround at the bottom. Maybe this can be helpful for someone, so I want to share it with you.
Is this maybe a valid feature request implementing this directly into the library? (Used version here: 1.1.4)
/**
* Hides the fast scroll handle on init, so it's first visible after scrolling.
*/
class HideOnInitAnimationHelper(view: View) : DefaultAnimationHelper(view) {
private var firstRun = true
override fun getScrollbarAutoHideDelayMillis(): Int {
return if (firstRun) {
0
} else {
super.getScrollbarAutoHideDelayMillis()
}
}
override fun showScrollbar(trackView: View, thumbView: View) {
// Assumption: showScrollbar() is only called once during initialization
if (firstRun) {
firstRun = false
return
}
super.showScrollbar(trackView, thumbView)
}
override fun hideScrollbar(trackView: View, thumbView: View) {
if (firstRun) {
trackView.alpha = 0f
thumbView.alpha = 0f
}
super.hideScrollbar(trackView, thumbView)
}
}
any sample on using FixItemDecorationRecyclerView for multiple decorators?
how we can draw it over other decorations with this method .. i mean to clarify it more how to bring fast scroller on top of every other view in the recycler view?
i will appreciate any help thanks ...
I tried to use this library on my app, and while on some places it seems to work fine, on others it has at least one of these issues:
That scrolling will move the thumb in the same direction of scrolling, without big jumps.
And, that moving the thumb by dragging it will follow your touch.
The opposite.
Import the attached sample, and try both: scroll up and down slowly. And then also drag the thumb up and down slowly.
At first I thought it's because of some clipping attributes or padding, but then I noticed it can occur in other cases too.
So no idea what really causes it.
I implemented in my app a fullscreen RecyclerView with getPopupText
support. It looks like this:
The problem is, the position provided by getPopupText
is the first visible item in the Adapter. Though as you can see here, this item (framed in red) is actually barely visible. So while the user only sees items starting with "L", the popup still shows "K", because the very last "K" item still hasn't been recycled.
I was thinking maybe there is a smarter way than getFirstItemAdapterPosition()
to get this position.
As I'm a bit curious, I investigated how other fast scrollers handle this issue. For instance, Nova Launcher's widget list uses a fast scroll which applies some kind of padding to this position, proportional to how low you are in the list (the more you scroll, the lower the item targeted by getPopupText
is on the screen). Which enables their popup to use the very first item's position when you're at the top, the very last item's position when you're at the bottom, and the position of an item which is always visible when you're anywhere in between.
It's kinda hard to explain with words. Actually experimenting with it helps to understand.
I am also aware that the Google Contacts app works in a similar way (using the first visible item), though it's not a problem because their list is not full screen, and the list snaps when fast scrolling, to make sure the first item is always fully visible. Not all lists can mimic this behavior though.
The position provided by getPopupText
should target an item which is always (clearly) visible to the user.
RecyclerView
and simply bind a FastScroller with FastScrollerBuilder(recyclerView).build()
(the issue is more visible with a full screen RV).PopupTextProvider
in the Adapter.Don't hesitate to ask for more details if it wasn't clear. :)
Thanks!
I'm using the FastScroller
in a FastScrollNestedScrollView
with a variable text view, but when the text content changes, it triggers this ANR and eventually crashes:
java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: JNI CallVoidMethodV called with pending exception java.lang.IllegalStateException: Unable to create layer for View, size 0x2240 max size 16384 color type 4 has context 1
java_vm_ext.cc:570] (Throwable with empty stack trace)
java_vm_ext.cc:570]
java_vm_ext.cc:570] in call to CallVoidMethodV
runtime.cc:642] Runtime aborting...
runtime.cc:642] Dumping all threads without mutator lock held
runtime.cc:642] All threads:
runtime.cc:642] DALVIK THREADS (65):
runtime.cc:642] "RenderThread" prio=10 tid=28 Runnable
runtime.cc:642] | group="" sCount=0 dsCount=0 flags=0 obj=0x15901770 self=0x7230945000
runtime.cc:642] | sysTid=1759 nice=-10 cgrp=default sched=0/0 handle=0x71cf00fd50
runtime.cc:642] | state=R schedstat=( 1221285985 237446466 5259 ) utm=85 stm=37 core=4 HZ=100
runtime.cc:642] | stack=0x71cef19000-0x71cef1b000 stackSize=991KB
runtime.cc:642] | held mutexes= "abort lock" "mutator lock"(shared held)
runtime.cc:642] native: #00 pc 00000000004123fc /apex/com.android.runtime/lib64/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+140)
runtime.cc:642] native: #01 pc 00000000004fa75c /apex/com.android.runtime/lib64/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+512)
runtime.cc:642] native: #02 pc 0000000000514dbc /apex/com.android.runtime/lib64/libart.so (art::DumpCheckpoint::Run(art::Thread*)+828)
runtime.cc:642] native: #03 pc 000000000050df24 /apex/com.android.runtime/lib64/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+560)
runtime.cc:642] native: #04 pc 000000000050d3a0 /apex/com.android.runtime/lib64/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool)+1964)
runtime.cc:642] native: #05 pc 00000000004ba258 /apex/com.android.runtime/lib64/libart.so (art::Runtime::Abort(char const*)+1452)
runtime.cc:642] native: #06 pc 000000000000b458 /system/lib64/libbase.so (android::base::LogMessage::~LogMessage()+580)
runtime.cc:642] native: #07 pc 0000000000378bd8 /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1584)
runtime.cc:642] native: #08 pc 0000000000378dfc /apex/com.android.runtime/lib64/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+108)
runtime.cc:642] native: #09 pc 000000000036b224 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::AbortF(char const*, ...)+136)
runtime.cc:642] native: #10 pc 0000000000369cf8 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::CheckPossibleHeapValue(art::ScopedObjectAccess&, char, art::(anonymous namespace)::JniValueType)+1144)
runtime.cc:642] native: #11 pc 00000000003690e0 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::(anonymous namespace)::JniValueType*)+652)
runtime.cc:642] native: #12 pc 000000000036e130 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CheckCallArgs(art::ScopedObjectAccess&, art::(anonymous namespace)::ScopedCheck&, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, art::InvokeType, art::(anonymous namespace)::VarArgs const*)+132)
runtime.cc:642] native: #13 pc 000000000036d020 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+712)
runtime.cc:642] native: #14 pc 000000000035b978 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+72)
runtime.cc:642] native: #15 pc 0000000000100c70 /system/lib64/libandroid_runtime.so (_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+116)
runtime.cc:642] native: #16 pc 0000000000157b94 /system/lib64/libandroid_runtime.so (android::FrameCompleteWrapper::onFrameComplete(long)+116)
runtime.cc:642] native: #17 pc 00000000004067b0 /system/lib64/libhwui.so (android::uirenderer::renderthread::CanvasContext::draw()+1336)
runtime.cc:642] native: #18 pc 0000000000405700 /system/lib64/libhwui.so (_ZNSt3__110__function6__funcIZN7android10uirenderer12renderthread13DrawFrameTask11postAndWaitEvE3$_0NS_9allocatorIS6_EEFvvEEclEv$c303f2d2360db58ed70a2d0ac7ed911b+380)
runtime.cc:642] native: #19 pc 000000000040fe1c /system/lib64/libhwui.so (android::uirenderer::WorkQueue::process()+228)
runtime.cc:642] native: #20 pc 000000000040fb04 /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderThread::threadLoop()+584)
runtime.cc:642] native: #21 pc 00000000000135f0 /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642] native: #22 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #23 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "main" prio=10 tid=1 Native
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x71f31738 self=0x72cdec1000
runtime.cc:642] | sysTid=1695 nice=-10 cgrp=default sched=0/0 handle=0x72cf437ee8
runtime.cc:642] | state=S schedstat=( 2448682863 16814804 2092 ) utm=221 stm=22 core=7 HZ=100
runtime.cc:642] | stack=0x7fd435f000-0x7fd4361000 stackSize=8192KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1695/stack)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] native: #01 pc 0000000000083e04 /apex/com.android.runtime/lib64/bionic/libc.so (__futex_wait_ex(void volatile*, bool, int, bool, timespec const*)+140)
runtime.cc:642] native: #02 pc 00000000000e6454 /apex/com.android.runtime/lib64/bionic/libc.so (pthread_cond_wait+60)
runtime.cc:642] native: #03 pc 0000000000072d50 /system/lib64/libc++.so (std::__1::condition_variable::wait(std::__1::unique_lock<std::__1::mutex>&)+20)
runtime.cc:642] native: #04 pc 0000000000075680 /system/lib64/libc++.so (std::__1::__assoc_sub_state::copy()+84)
runtime.cc:642] native: #05 pc 0000000000075958 /system/lib64/libc++.so (std::__1::future<void>::get()+24)
runtime.cc:642] native: #06 pc 00000000004afc00 /system/lib64/libhwui.so (android::uirenderer::renderthread::RenderProxy::setStopped(bool)+220)
runtime.cc:642] at android.graphics.HardwareRenderer.nSetStopped(Native method)
runtime.cc:642] at android.graphics.HardwareRenderer.setStopped(HardwareRenderer.java:463)
runtime.cc:642] at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4084)
runtime.cc:642] at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3320)
runtime.cc:642] at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2200)
runtime.cc:642] at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9037)
runtime.cc:642] at android.view.Choreographer$CallbackRecord.run(Choreographer.java:999)
runtime.cc:642] at android.view.Choreographer.doCallbacks(Choreographer.java:797)
runtime.cc:642] at android.view.Choreographer.doFrame(Choreographer.java:732)
runtime.cc:642] at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:984)
runtime.cc:642] at android.os.Handler.handleCallback(Handler.java:883)
runtime.cc:642] at android.os.Handler.dispatchMessage(Handler.java:100)
runtime.cc:642] at android.os.Looper.loop(Looper.java:237)
runtime.cc:642] at com.drakeet.purewriter.PureWriter.loop(PureWriter.kt:227)
runtime.cc:642] at android.os.Handler.handleCallback(Handler.java:883)
runtime.cc:642] at android.os.Handler.dispatchMessage(Handler.java:100)
runtime.cc:642] at android.os.Looper.loop(Looper.java:237)
runtime.cc:642] at android.app.ActivityThread.main(ActivityThread.java:8016)
runtime.cc:642] at java.lang.reflect.Method.invoke(Native method)
runtime.cc:642] at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
runtime.cc:642] at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1076)
runtime.cc:642]
runtime.cc:642] "Jit thread pool worker thread 0" prio=10 tid=2 Native
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x159003c8 self=0x723a80e000
runtime.cc:642] | sysTid=1704 nice=0 cgrp=default sched=0/0 handle=0x723bcd9d40
runtime.cc:642] | state=S schedstat=( 910237761 75075319 1271 ) utm=69 stm=21 core=5 HZ=100
runtime.cc:642] | stack=0x723bbdb000-0x723bbdd000 stackSize=1023KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1704/stack)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] native: #01 pc 000000000014c1f4 /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642] native: #02 pc 000000000051681c /apex/com.android.runtime/lib64/libart.so (art::ThreadPool::GetTask(art::Thread*)+256)
runtime.cc:642] native: #03 pc 0000000000515ba8 /apex/com.android.runtime/lib64/libart.so (art::ThreadPoolWorker::Run()+144)
runtime.cc:642] native: #04 pc 0000000000515668 /apex/com.android.runtime/lib64/libart.so (art::ThreadPoolWorker::Callback(void*)+148)
runtime.cc:642] native: #05 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #06 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "Signal Catcher" prio=10 tid=6 WaitingInMainSignalCatcherLoop
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900440 self=0x723a9e6c00
runtime.cc:642] | sysTid=1709 nice=0 cgrp=default sched=0/0 handle=0x723bbd4d50
runtime.cc:642] | state=S schedstat=( 115573 114427 1 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642] | stack=0x723bade000-0x723bae0000 stackSize=991KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1709/stack)
runtime.cc:642] native: #00 pc 00000000000d1848 /apex/com.android.runtime/lib64/bionic/libc.so (__rt_sigtimedwait+8)
runtime.cc:642] native: #01 pc 000000000009031c /apex/com.android.runtime/lib64/bionic/libc.so (sigwait+68)
runtime.cc:642] native: #02 pc 00000000004dc608 /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::WaitForSignal(art::Thread*, art::SignalSet&)+392)
runtime.cc:642] native: #03 pc 00000000004dafa4 /apex/com.android.runtime/lib64/libart.so (art::SignalCatcher::Run(void*)+292)
runtime.cc:642] native: #04 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #05 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "ADB-JDWP Connection Control Thread" prio=10 tid=8 WaitingInMainDebuggerLoop
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x159004b8 self=0x72306fe400
runtime.cc:642] | sysTid=1710 nice=0 cgrp=default sched=0/0 handle=0x723baced50
runtime.cc:642] | state=S schedstat=( 1494010 1300990 8 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642] | stack=0x723b9d8000-0x723b9da000 stackSize=991KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1710/stack)
runtime.cc:642] native: #00 pc 00000000000d1748 /apex/com.android.runtime/lib64/bionic/libc.so (__ppoll+8)
runtime.cc:642] native: #01 pc 000000000008dc78 /apex/com.android.runtime/lib64/bionic/libc.so (poll+88)
runtime.cc:642] native: #02 pc 0000000000008e24 /apex/com.android.runtime/lib64/libadbconnection.so (adbconnection::AdbConnectionState::RunPollLoop(art::Thread*)+824)
runtime.cc:642] native: #03 pc 000000000000721c /apex/com.android.runtime/lib64/libadbconnection.so (adbconnection::CallbackFunction(void*)+1076)
runtime.cc:642] native: #04 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #05 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "HeapTaskDaemon" prio=10 tid=9 WaitingForTaskProcessor
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15904948 self=0x72cdec4800
runtime.cc:642] | sysTid=1711 nice=4 cgrp=default sched=0/0 handle=0x723b9c8d50
runtime.cc:642] | state=S schedstat=( 32493126 335053 9 ) utm=2 stm=0 core=7 HZ=100
runtime.cc:642] | stack=0x723b8c6000-0x723b8c8000 stackSize=1039KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1711/stack)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] native: #01 pc 000000000014c1f4 /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642] native: #02 pc 0000000000290a5c /apex/com.android.runtime/lib64/libart.so (art::gc::TaskProcessor::GetTask(art::Thread*)+444)
runtime.cc:642] native: #03 pc 00000000002912e8 /apex/com.android.runtime/lib64/libart.so (art::gc::TaskProcessor::RunAllTasks(art::Thread*)+92)
runtime.cc:642] at dalvik.system.VMRuntime.runHeapTasks(Native method)
runtime.cc:642] at java.lang.Daemons$HeapTaskDaemon.runInternal(Daemons.java:523)
runtime.cc:642] at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]
runtime.cc:642] "FinalizerDaemon" prio=10 tid=10 Waiting
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900530 self=0x72cdee8000
runtime.cc:642] | sysTid=1713 nice=4 cgrp=default sched=0/0 handle=0x723b750d50
runtime.cc:642] | state=S schedstat=( 5329425 251198 7 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642] | stack=0x723b64e000-0x723b650000 stackSize=1039KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1713/stack)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] native: #01 pc 000000000014c1f4 /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642] native: #02 pc 000000000040d914 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642] native: #03 pc 000000000040f374 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642] at java.lang.Object.wait(Native method)
runtime.cc:642] - waiting on <0x068f525c> (a java.lang.Object)
runtime.cc:642] at java.lang.Object.wait(Object.java:442)
runtime.cc:642] at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:190)
runtime.cc:642] - locked <0x068f525c> (a java.lang.Object)
runtime.cc:642] at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:211)
runtime.cc:642] at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:271)
runtime.cc:642] at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]
runtime.cc:642] "FinalizerWatchdogDaemon" prio=10 tid=11 Sleeping
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x159005a8 self=0x72cdee9c00
runtime.cc:642] | sysTid=1714 nice=4 cgrp=default sched=0/0 handle=0x723b647d50
runtime.cc:642] | state=S schedstat=( 160781 188959 5 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642] | stack=0x723b545000-0x723b547000 stackSize=1039KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1714/stack)
runtime.cc:642] native: #00 pc 0000000000080340 /apex/com.android.runtime/lib64/bionic/libc.so (syscall+32)
runtime.cc:642] native: #01 pc 000000000014c62c /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::TimedWait(art::Thread*, long, int)+168)
runtime.cc:642] native: #02 pc 000000000040d928 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+640)
runtime.cc:642] native: #03 pc 000000000040f374 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642] at java.lang.Thread.sleep(Native method)
runtime.cc:642] - sleeping on <0x05464965> (a java.lang.Object)
runtime.cc:642] at java.lang.Thread.sleep(Thread.java:440)
runtime.cc:642] - locked <0x05464965> (a java.lang.Object)
runtime.cc:642] at java.lang.Thread.sleep(Thread.java:356)
runtime.cc:642] at java.lang.Daemons$FinalizerWatchdogDaemon.sleepForMillis(Daemons.java:383)
runtime.cc:642] at java.lang.Daemons$FinalizerWatchdogDaemon.waitForFinalization(Daemons.java:411)
runtime.cc:642] at java.lang.Daemons$FinalizerWatchdogDaemon.runInternal(Daemons.java:323)
runtime.cc:642] at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]
runtime.cc:642] "ReferenceQueueDaemon" prio=10 tid=12 Waiting
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900620 self=0x72cdec6400
runtime.cc:642] | sysTid=1712 nice=4 cgrp=default sched=0/0 handle=0x723b8b6d50
runtime.cc:642] | state=S schedstat=( 2705053 406614 6 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642] | stack=0x723b7b4000-0x723b7b6000 stackSize=1039KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1712/stack)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] native: #01 pc 000000000014c1f4 /apex/com.android.runtime/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
runtime.cc:642] native: #02 pc 000000000040d914 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642] native: #03 pc 000000000040f374 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, art::ObjPtr<art::mirror::Object>, long, int, bool, art::ThreadState)+284)
runtime.cc:642] at java.lang.Object.wait(Native method)
runtime.cc:642] - waiting on <0x0268363a> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
runtime.cc:642] at java.lang.Object.wait(Object.java:442)
runtime.cc:642] at java.lang.Object.wait(Object.java:568)
runtime.cc:642] at java.lang.Daemons$ReferenceQueueDaemon.runInternal(Daemons.java:215)
runtime.cc:642] - locked <0x0268363a> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
runtime.cc:642] at java.lang.Daemons$Daemon.run(Daemons.java:137)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642]
runtime.cc:642] "Binder:1695_1" prio=10 tid=13 Native
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900698 self=0x723f1e5800
runtime.cc:642] | sysTid=1715 nice=0 cgrp=default sched=0/0 handle=0x723b440d50
runtime.cc:642] | state=S schedstat=( 409635 187396 4 ) utm=0 stm=0 core=4 HZ=100
runtime.cc:642] | stack=0x723b34a000-0x723b34c000 stackSize=991KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1715/stack)
runtime.cc:642] native: #00 pc 00000000000d1704 /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642] native: #01 pc 000000000008bc64 /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642] native: #02 pc 0000000000058fe8 /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642] native: #03 pc 00000000000591c4 /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642] native: #04 pc 000000000005999c /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+64)
runtime.cc:642] native: #05 pc 000000000007fc18 /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642] native: #06 pc 00000000000135f0 /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642] native: #07 pc 00000000000f09e8 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642] native: #08 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #09 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "Binder:1695_2" prio=10 tid=14 Native
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900710 self=0x72307ecc00
runtime.cc:642] | sysTid=1717 nice=0 cgrp=default sched=0/0 handle=0x723b343d50
runtime.cc:642] | state=S schedstat=( 5683542 3898646 4 ) utm=0 stm=0 core=5 HZ=100
runtime.cc:642] | stack=0x723b24d000-0x723b24f000 stackSize=991KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1717/stack)
runtime.cc:642] native: #00 pc 00000000000d1704 /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642] native: #01 pc 000000000008bc64 /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642] native: #02 pc 0000000000058fe8 /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642] native: #03 pc 00000000000591c4 /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642] native: #04 pc 00000000000599c8 /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+108)
runtime.cc:642] native: #05 pc 000000000007fc18 /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642] native: #06 pc 00000000000135f0 /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642] native: #07 pc 00000000000f09e8 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642] native: #08 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #09 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] (no managed stack frames)
runtime.cc:642]
runtime.cc:642] "Binder:1695_3" prio=10 tid=15 Native
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900788 self=0x723f1fc000
runtime.cc:642] | sysTid=1720 nice=0 cgrp=default sched=0/0 handle=0x723b1fdd50
runtime.cc:642] | state=S schedstat=( 5090725 5721044 22 ) utm=0 stm=0 core=6 HZ=100
runtime.cc:642] | stack=0x723b107000-0x723b109000 stackSize=991KB
runtime.cc:642] | held mutexes=
runtime.cc:642] kernel: (couldn't read /proc/self/task/1720/stack)
runtime.cc:642] native: #00 pc 00000000000d1704 /apex/com.android.runtime/lib64/bionic/libc.so (__ioctl+4)
runtime.cc:642] native: #01 pc 000000000008bc64 /apex/com.android.runtime/lib64/bionic/libc.so (ioctl+132)
runtime.cc:642] native: #02 pc 0000000000058fe8 /system/lib64/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+244)
runtime.cc:642] native: #03 pc 00000000000591c4 /system/lib64/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+24)
runtime.cc:642] native: #04 pc 00000000000599c8 /system/lib64/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+108)
runtime.cc:642] native: #05 pc 000000000007fc18 /system/lib64/libbinder.so (android::PoolThread::threadLoop()+24)
runtime.cc:642] native: #06 pc 00000000000135f0 /system/lib64/libutils.so (android::Thread::_threadLoop(void*)+328)
runtime.cc:642] native: #07 pc 00000000000f09e8 /system/lib64/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+140)
runtime.cc:642] native: #08 pc 00000000000e6f10 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
runtime.cc:642] native: #09 pc 00000000000850c8 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15900800 self=0x72307fe400
runtime.cc:642] native: #03 pc 000000000034c5e4 /apex/com.android.runtime/lib64/libart.so (art::ProfileSaver::RunProfileSaverThread(void*)+88)
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642]
runtime.cc:642] native: #02 pc 0000000000017f8c /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+56)
runtime.cc:642] at android.os.MessageQueue.next(MessageQueue.java:336)
runtime.cc:642] | held mutexes=
runtime.cc:642] native: #03 pc 000000000016bfb8 /system/lib64/libandroid_runtime.so (android::android_os_MessageQueue_nativePollOnce(_JNIEnv*, _jobject*, long, int)+44)
runtime.cc:642] native: #01 pc 00000000004f2814 /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+1308)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] | state=S schedstat=( 99624689 8520156 63 ) utm=9 stm=0 core=6 HZ=100
runtime.cc:642] native: #00 pc 000000000008033c /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
runtime.cc:642] at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642] | held mutexes=
runtime.cc:642] at java.lang.Thread.sleep(Native method)
runtime.cc:642] native: #02 pc 00000000004448e8 /apex/com.android.runtime/lib64/libart.so (art::Unsafe_park(_JNIEnv*, _jobject*, unsigned char, long)+612)
runtime.cc:642] at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2067)
runtime.cc:642] at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
runtime.cc:642] native: #02 pc 00000000004448e8 /apex/com.android.runtime/lib64/libart.so (art::Unsafe_park(_JNIEnv*, _jobject*, unsigned char, long)+612)
runtime.cc:642] kernel: (couldn't read /proc/self/task/1766/stack)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642]
runtime.cc:642] | stack=0x71c61fb000-0x71c61fd000 stackSize=1039KB
runtime.cc:642] native: #01 pc 00000000004f24c8 /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642] at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:849)
runtime.cc:642] | sysTid=1769 nice=0 cgrp=default sched=0/0 handle=0x71c61f4d50
runtime.cc:642] kernel: (couldn't read /proc/self/task/1769/stack)
runtime.cc:642] kernel: (couldn't read /proc/self/task/1770/stack)
runtime.cc:642] at sun.misc.Unsafe.park(Native method)
runtime.cc:642] | sysTid=1772 nice=0 cgrp=default sched=0/0 handle=0x71c2df4d50
runtime.cc:642] kernel: (couldn't read /proc/self/task/1772/stack)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642]
runtime.cc:642] at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:230)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] | stack=0x71c29d7000-0x71c29d9000 stackSize=1039KB
runtime.cc:642] native: #01 pc 00000000004f24c8 /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] "RxComputationThreadPool-3" prio=10 tid=41 TimedWaiting
runtime.cc:642] - waiting on an unknown object
runtime.cc:642] "RxCachedThreadScheduler-11" prio=10 tid=49 Waiting
runtime.cc:642] | stack=0x71b40f9000-0x71b40fb000 stackSize=1039KB
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1092)
runtime.cc:642] native: #01 pc 00000000004f24c8 /apex/com.android.runtime/lib64/libart.so (art::Thread::Park(bool, long)+464)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642] | stack=0x71b2ee7000-0x71b2ee9000 stackSize=1039KB
runtime.cc:642] native: #02 pc 000000000040d914 /apex/com.android.runtime/lib64/libart.so (art::Monitor::Wait(art::Thread*, long, int, bool, art::ThreadState)+620)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] | sysTid=1799 nice=0 cgrp=default sched=0/0 handle=0x71afbe9d50
runtime.cc:642] | group="" sCount=1 dsCount=0 flags=1 obj=0x15903d90 self=0x71db1c6800
runtime.cc:642] at okhttp3.internal.concurrent.TaskRunner.awaitTaskToRun(TaskRunner.kt:218)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642] | sysTid=1800 nice=9 cgrp=default sched=0/0 handle=0x71adae0d50
runtime.cc:642] native: #00 pc 0000000000080340 /apex/com.android.runtime/lib64/bionic/libc.so (syscall+32)
runtime.cc:642] at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:461)
runtime.cc:642] at java.util.concurrent.locks.LockSupport.park(LockSupport.java:190)
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
runtime.cc:642] kernel: (couldn't read /proc/self/task/1855/stack)
runtime.cc:642] at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
runtime.cc:642] at java.lang.Thread.run(Thread.java:919)
runtime.cc:642] kernel: (couldn't read /proc/self/task/1856/stack)
runtime.cc:642] - waiting on an unknown object
runtime.cc:642] at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
runtime.cc:642]
runtime.cc:642] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1152)
runtime.cc:642] | held mutexes=
runtime.cc:642] native: #11 pc 000000000036d020 /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType)+712)
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 1759 (RenderThread), pid 1695 (ndroid.systemui)
1.1.4
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.jiggdev.visorfondos, PID: 12925 java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar) at me.zhanghai.android.fastscroll.PopupStyles.<clinit>(PopupStyles.java:34) at me.zhanghai.android.fastscroll.FastScrollerBuilder.useDefaultStyle(FastScrollerBuilder.java:122) at me.zhanghai.android.fastscroll.FastScrollerBuilder.<init>(FastScrollerBuilder.java:62) at com.jiggdev.visorfondos.fragments.Fragment_Activos.setRecyclerView(Fragment_Activos.java:61) at com.jiggdev.visorfondos.fragments.Fragment_Activos.onViewCreated(Fragment_Activos.java:54) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:322) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354) at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432) at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495) at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847) at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) at android.os.Handler.handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7478) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941) I/Process: Sending signal. PID: 12925 SIG: 9
FastScroller fastScroller = new FastScrollerBuilder(rv).build();
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'me.zhanghai.android.fastscroll:library:1.1.4'
compileSdkVersion 29
buildToolsVersion "29.0.3"
Scroll thumb should be shown.
Scroll thumb going invisible and unexpected behavior when item height is big.
In RecyclerView with other item which is different height (eg. group header with child item), the thumb is blink and translate to wrong position when scroll.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.