我有一个Android应用程序,它有一个绘制网格的自定义视图。自定义视图只是主要活动的xml文件的一部分。我需要能够根据用户选择的相关网格图块(x,y)扫描wifi。我可以在自定义视图中使用onTouchEvent方法获取正确的网格图块,但我不知道如何将该信息返回到包含视图的主要活动,因此我可以将wifi扫描与onTouchEvent和选中的x,y tile。
如果我需要提供更多信息或任何代码,请告诉我。
修改
我会尝试简化一下这个问题。
我有一个活动,其布局文件包含自定义视图。此自定义视图会覆盖onTouchEvent(),并且在自定义视图中触发onTouchEvent()时,我需要将一些数据发送回活动,然后使用自定义视图中的数据执行wifi扫描。
正如Stefan所说,自定义事件可能有用,但我不确定我的情况下的实现。
答案 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 传递给活动。当然,您可以传递任何所需的数据。