将文本从主动脉传递到Kotlin中的儿童文本视图
我以前从未与Android Studio和Kotlin合作过,但是通过Native通过Flutter通过数据的任务出现了。 我需要将文本从Main Activity传递,在那里我通过MethodChannel获取文本到AndroidTextView,然后将其传递给Flutter。 我不知道如何传递文本,我试图意图这样做,但看来我做错了什么。
MainAttivity
class MainActivity : FlutterActivity() {
private val androidViewId = "INTEGRATION_ANDROID"
private val methodChannel = "CALL_METHOD"
private val intentMessageId = "CALL"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
flutterEngine.platformViewsController.registry.registerViewFactory(androidViewId, AndroidTextViewFactory(flutterEngine.dartExecutor.binaryMessenger, Intent()))
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, methodChannel).setMethodCallHandler {
call, result ->
if (call.method == intentMessageId) {
val intent = Intent()
intent.putExtra(intentMessageId, call.arguments.toString())
AndroidTextViewFactory(flutterEngine.dartExecutor.binaryMessenger, intent)
result.success(call.arguments);
} else {
result.notImplemented()
}
}
}
}
AndroidTextView
internal class AndroidTextView(context: Context?, id: Int, creationParams: Map<String?, Any?>?, messenger: BinaryMessenger, data: Intent) : PlatformView {
private val textView: TextView = TextView(context)
private val intentMessageId = "CALL"
override fun getView(): View {
return textView
}
override fun dispose() {}
init {
val intent = Intent(context, MainActivity::class.java);
val text = intent.getStringExtra(intentMessageId);
textView.textSize = 36f
textView.text = "$text"
}
}
AndroidTextViewFactory
class AndroidTextViewFactory(messenger: BinaryMessenger, data: Intent) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
private val binaryMessenger: BinaryMessenger = messenger
private val intent: Intent = data
override fun create(context: Context?, viewId: Int, args: Any?): PlatformView {
val creationParams = args as Map<String?, Any?>?
return AndroidTextView(context, viewId, creationParams, binaryMessenger, intent)
}
}
I haven't worked with Android Studio and Kotlin before, but the task of passing data from Flutter via native came up.
I need to pass text from MainActivity where I get text via MethodChannel to AndroidTextView and then pass it to Flutter.
I can't figure out how to pass the text, I tried to do it with intent, but it seems I am doing something wrong.
MainActivity
class MainActivity : FlutterActivity() {
private val androidViewId = "INTEGRATION_ANDROID"
private val methodChannel = "CALL_METHOD"
private val intentMessageId = "CALL"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
flutterEngine.platformViewsController.registry.registerViewFactory(androidViewId, AndroidTextViewFactory(flutterEngine.dartExecutor.binaryMessenger, Intent()))
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, methodChannel).setMethodCallHandler {
call, result ->
if (call.method == intentMessageId) {
val intent = Intent()
intent.putExtra(intentMessageId, call.arguments.toString())
AndroidTextViewFactory(flutterEngine.dartExecutor.binaryMessenger, intent)
result.success(call.arguments);
} else {
result.notImplemented()
}
}
}
}
AndroidTextView
internal class AndroidTextView(context: Context?, id: Int, creationParams: Map<String?, Any?>?, messenger: BinaryMessenger, data: Intent) : PlatformView {
private val textView: TextView = TextView(context)
private val intentMessageId = "CALL"
override fun getView(): View {
return textView
}
override fun dispose() {}
init {
val intent = Intent(context, MainActivity::class.java);
val text = intent.getStringExtra(intentMessageId);
textView.textSize = 36f
textView.text = "$text"
}
}
AndroidTextViewFactory
class AndroidTextViewFactory(messenger: BinaryMessenger, data: Intent) : PlatformViewFactory(StandardMessageCodec.INSTANCE) {
private val binaryMessenger: BinaryMessenger = messenger
private val intent: Intent = data
override fun create(context: Context?, viewId: Int, args: Any?): PlatformView {
val creationParams = args as Map<String?, Any?>?
return AndroidTextView(context, viewId, creationParams, binaryMessenger, intent)
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
意图,通常用作 明确的意图 ,
显式意图,在同一应用程序中的两个活动之间进行通信。
并且意图是这样的:
我看到您的代码非常类似于 flutter教程:在flutter应用中托管本机android视图,带有平台视图
如教程所示,您不需要
MethodChannel
只需在
MainActivity
中注册Android本机视图,然后在
dart
中使用,您可以在没有方法频道的情况下处理相关数据
Intent, usually used as Explicit Intent,
Explicit Intent, communicates between two activities inside the same application.
And the intent is used like this:
And I see that your code is very much like the flutter tutorial: Hosting native Android views in your Flutter app with Platform Views
as the tutorial shows, you don't need the
MethodChannel
simply register the android native view in
MainActivity
then used in
dart
you can handle the relevant data without method channel