在自定义视图中扫描无线网络

时间:2018-03-06 22:42:55

标签: android kotlin android-custom-view android-wifi

我有一个Android应用程序,它有一个绘制网格的自定义视图。自定义视图只是主要活动的xml文件的一部分。我需要能够根据用户选择的相关网格图块(x,y)扫描wifi。我可以在自定义视图中使用onTouchEvent方法获取正确的网格图块,但我不知道如何将该信息返回到包含视图的主要活动,因此我可以将wifi扫描与onTouchEvent和选中的x,y tile。

如果我需要提供更多信息或任何代码,请告诉我。

修改

我会尝试简化一下这个问题。

我有一个活动,其布局文件包含自定义视图。此自定义视图会覆盖onTouchEvent(),并且在自定义视图中触发onTouchEvent()时,我需要将一些数据发送回活动,然后使用自定义视图中的数据执行wifi扫描。

正如Stefan所说,自定义事件可能有用,但我不确定我的情况下的实现。

1 个答案:

答案 0 :(得分:1)

使用自定义事件,您的代码将是这样的:

class CustomView : View {

    // define interface for your custom event
    interface MyCustomEvent {
        fun onGridTileClicked(x: Int, y: Int) // define your custom event
    }


    private var listener: MyCustomEvent? // define listener for your custom event

    /* in constructor of your custom view, you can register your activity to 
       listen for upcoming custom event, since you'll get context of your 
       activity here */
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
        this.listener = context as? MyCustomEvent // register your activity as listener

        ...
    }

    override fun onTouchEvent(e: MotionEvent): Boolean {
        // get your x & y
        listener?.onGridTileClicked(x, y) // notify listener and pass x & y as arguments

        ...
    }

    ...
}

在你的活动中:

// implement custom event interface
class MyActivity : Activity, CustomView.MyCustomEvent {
    ...

    override fun onGridTileClicked(x: Int, y: Int) {
        // implement your logic
    }
}

编辑:

我的假设是您希望将 x y 传递给活动。当然,您可以传递任何所需的数据。