android - ScrollView上的setOnScrollChangeListener : Error

标签 android compiler-errors scrollview

当用户位于ScrollView的末尾时,我想检测到它并加载一些新项目。我已经完成了,但是看来我使用的功能不适用于某些旧版本的Android。

我有这个代码:

scrollView = (ScrollView) findViewById(R.id.scrollView);
    scrollView.setOnScrollChangeListener(new ScrollListener(this));

然后 :
@TargetApi(Build.VERSION_CODES.M)
public class ScrollListener implements View.OnScrollChangeListener {


ScrollingActivity context;

public ScrollListener(ScrollingActivity context) {
    this.context = context;
}

@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
    ScrollView scrollView = (ScrollView) v;
    View view = (View) scrollView.getChildAt(scrollView.getChildCount() - 1);
    int diff = (view.getBottom() - (scrollView.getHeight() + scrollY));
    int oldDiff = (view.getBottom() - (scrollView.getHeight() + oldScrollY));
    // Si on a atteint le bas de la scrollView et qu'on était en train de descendre
    if(diff == 0 && oldDiff > 0) {
        context.endOfScroll(); // function I call to load data...
    }
}}

我有这个错误:
08-19 21:27:35.135 26504-26504/com.histoire_horreur E/AndroidRuntime: FATAL EXCEPTION: main
                                                              java.lang.NoClassDefFoundError: com.histoire_horreur.Listener.ScrollListener
                                                                  at com.histoire_horreur.MainActivity.createView(MainActivity.java:59)
                                                                  at com.histoire_horreur.MainActivity.onCreate(MainActivity.java:47)
                                                                  at android.app.Activity.performCreate(Activity.java:5122)
                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1150)
                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315)
                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403)
                                                                  at android.app.ActivityThread.access$600(ActivityThread.java:165)
                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)
                                                                  at android.os.Handler.dispatchMessage(Handler.java:107)
                                                                  at android.os.Looper.loop(Looper.java:194)
                                                                  at android.app.ActivityThread.main(ActivityThread.java:5391)
                                                                  at java.lang.reflect.Method.invokeNative(Native Method)
                                                                  at java.lang.reflect.Method.invoke(Method.java:525)
                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
                                                                  at dalvik.system.NativeStart.main(Native Method)

就像我说的那样,这段代码在某些版本的Android上可以正常运行,但在我的Wiko 4.2.2上却不能。
我的错误和这里相同:https://forums.xamarin.com/discussion/62241/problem-setting-on-scroll-listener-to-android-horizontal-scroll-view-class-not-found-exception
解决方案是使用ViewTreeObserver,但是,当滚动在底部时,我无法成功检测到。我试图这样做:
scrollView = (ScrollView) findViewById(R.id.scrollView);
scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
// How to get X, Y, Old X and Old Y ?
}
});

但是我无法获取scrollX,scrollY,oldScrollX和oldScrollY。

您知道一种使其在所有版本的Android上都能正常工作的方法吗?

最佳答案

我有同样的问题。
如果您使用ViewTreeObserver,则代码将正常运行,没有异常(exception),唯一的问题是在底部滚动 View 时检测到。
此代码段可以帮助您:

@Override
public void onScrollChanged() {

    View v = myScrollView.getChildAt(myScrollView.getChildCount() - 1);
    int diff = (v.getBottom() - (myScrollView.getHeight() + myScrollView.getScrollY()));
    if (diff <= 0) {
        //load data here, there is bottom of scrollview
     }
}

关于android - ScrollView上的setOnScrollChangeListener : Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578196/

相关文章:

android - 使编辑文本出现在android中设备的顶部和软键盘之间

android - 在我的 android 应用程序中开始新声音之前停止以前的声音

c - 强制编译器在预处理期间进行算术计算

Android - 如何禁用 ScrollView 和所有子项

Android 在大屏幕底部设置一个 ImageView 并在小屏幕上滚动它

c++ - 包含命名空间的类模板的前向声明导致编译错误

Android Phonegap 滚动不工作

android - 如何在android中读取.webarchive文件

android - AsyncTask 需要很长时间才能启动 Android

bash - Cygwin程序已编译但无法运行