扩展ScrollView onScrollEnded从数据库加载多个条目,但是每个End我只需要一次

美宝

我知道为什么在使用onScrollEnd结束时会多次调用我的Extended ScrollViews onScrollChanged(这是因为我通过滚动多次“到达结束”,从而多次调用onScrollEnd),并且因为它在我需要时从数据库加载多个条目到达第一端时将其加载一次。

在我的ExtendedScrollView类中

protected void onScrollChanged(int x, int y, int oldx, int oldy) {

View view = (View) getChildAt(getChildCount() - 1);
int diff = (view.getBottom()-(getHeight()+getScrollY()+view.getTop()));

if (diff == 0) { 

      if (scrollViewListener != null) {

          scrollViewListener.onScrollEnded(this, x, y, oldx, oldy);

      }

  }

   super.onScrollChanged(x, y, oldx, oldy);
}

public interface ScrollViewListener {

   void onScrollEnded(ExtendedScrollView scrollView, int x, int y, int oldx, int oldy);
}

在我的活动中,我有

@Override
    public void onScrollEnded(ExtendedScrollView scrollView, int x, int y, int oldx, int oldy) {

   //Called multiple times because of scroll but needed only once 

  //read 6 Strings (for example) from Database and refresh Tableview with that data (working so I think there is no need for the code)

}

因此,有一种方法可以停止获取多个“端点”(由滚动引起)。只能获取一次OnScrollEnded并从数据库中仅加载6个字符串(由于多次滚动调用),然后在接下来的12个Scroll中读取接下来的6个,依此类推...

任何帮助表示赞赏。

美宝

我找到了一种在StackOverflow上找到的组合代码的方式

ExtendedViewClass

public class ExtendedScrollView extends ScrollView {

private Runnable scrollerTask;
private int initialPosition;

private int newCheck = 100;


public interface OnScrollStoppedListener{
void onScrollStopped();
}

private OnScrollStoppedListener onScrollStoppedListener;

public ExtendedScrollView(Context context, AttributeSet attrs) {
super(context, attrs);

scrollerTask = new Runnable() {

    public void run() {

        int newPosition = getScrollY();

        View view = (View) getChildAt(getChildCount() - 1);
        int diff = (view.getBottom()-(getHeight()+getScrollY()+view.getTop()));

        if(initialPosition - newPosition == 0 && diff == 0){//has stopped and reached end

            if(onScrollStoppedListener!=null){

                onScrollStoppedListener.onScrollStopped();
            }
        }
    }
 };
}

public void setOnScrollStoppedListener(ExtendedScrollView.OnScrollStoppedListener listener){
onScrollStoppedListener = listener;
 }

public void startScrollerTask(){

initialPosition = getScrollY();
ExtendedScrollView.this.postDelayed(scrollerTask, newCheck);
  }
}

然后在我的活动中

scrollView = (ExtendedScrollView) findViewById(R.id.ScrView);


scrollView.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_UP) {


            scrollView.startScrollerTask();
        }

        return false;
    }
});
scrollView.setOnScrollStoppedListener(new OnScrollStoppedListener() {

    public void onScrollStopped() {

        //code here

    }
});

这将检查其滚动是否结束以及Scroll是否停止,然后运行OnScrollStopped,因此仅运行一次(不多于我之前遇到的问题)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Bootstrap-可折叠表-一次只需要扩展一行

Kivy - 创建一个可扩展的 ScrollView

Scrollview仅可水平扩展

如何获取只需要获取一次的数据

LinearLayout在ScrollView中未扩展

向下扩展Kivy ScrollView的内容

如何使我的 Chrome 扩展程序只需单击一次即可激活默认弹出窗口?

Angular 2 - 如何创建一个我只需要加载一次的全局服务

当我只需要可滚动元素时页面会扩展

一次扩展多个协议

我如何做到这样我只需要引用一次我的 api 密钥?

选择器中每个元素的事件触发,只需要触发一次

为什么在我要使用的每个文件中都需要导入一些Pod,而只需要导入一次?

我应该一次加载全部数据库结果还是发出多个请求?

我只需要使用 onload 函数显示一次 jquery 弹出窗口

python imaplib:我只需要调用一次.close()吗?

我正在使用递归函数,并且只需要在函数中打印一次

我只需要运行一次此脚本文件吗?

闪亮按钮只需要一次

Onload 只需要工作一次

聊天窗口ScrollView向下扩展而不是向上扩展

在3个包装的div中有图像,但一次只需要查看一个div。加载太慢

_replicator数据库不可扩展,或者我的设计需要调整

Django:一次将多个条目保存在数据库中

玉块扩展到数据库中的每个项目?

配方数据库扩展

scrollview无法从数据库图像工作

如何在构造函数的控制器中调用模型,因为我只需要编写一次

Typo3 扩展,它需要一些数据库列是大写的