我需要知道用户何时上下滚动。我设法实现了这一目标,但现在我不得不将结果返回到需要的地方。具体来说,我不知道如何将结果传递给我创建的接口。

这是我得到的错误:


  尝试调用接口方法“ void”
  com.app.android.interfaces.ScrollDirection.Down(int)'
  空对象引用


这是我的自定义ScrollView:

public class CustomScrollView extends ScrollView {

    private ScrollDirection scrolldirection;

    public CustomScrollView(Context context) {
        super(context);
        scrolldirection = (ScrollDirection) context;
    }

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
        super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
        if(scrollY<oldScrollY){
            scrolldirection.Down(1);
        }else{
            scrolldirection.Down(-1);
        }
    }

    public interface ScrollDirection{
        public void Down(int direction);
    }
}

最佳答案

您需要在每个构造函数中添加此行scrolldirection = (ScrollDirection) context;

public CustomScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
    scrolldirection = (ScrollDirection) context;
}

public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    scrolldirection = (ScrollDirection) context;
}


为了允许Android Studio与您的视图交互,您至少必须提供一个以Context和AttributeSet对象为参数的构造函数

Docs link

更新:最近的问题是在CustomScrollView中实现了Fragment,但是Fragment没有其context。要实现此目的,请将父Activity implements设为ScrollDirection,并在Fragment中创建一些函数,然后从Activity's Down函数中调用它们。

08-06 04:56