使用自定义ScrollView类实现界面 - Android

时间:2017-01-04 12:27:25

标签: java android interface

我需要知道用户何时向上或向下滚动。我设法实现了这一点,但现在我很难将结果返回到我需要它的主类。具体来说,我不知道如何将结果传递给我创建的界面。

这是我得到的错误:

  

尝试调用接口方法' void   com.app.android.interfaces.ScrollDirection.Down(INT)'在...上   null对象引用

这是我的自定义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);
    }
}

1 个答案:

答案 0 :(得分:4)

您需要在每个构造函数

中添加此行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

更新:最近的问题是CustomScrollViewFragment的实施,但Fragment没有context。要实现这一点,请将父Activity implements设为ScrollDirection并在Fragment中创建一些功能,并从Activity's Down函数调用它们。