Java:Android UI(Android Studio)和Java后端(模型)的交互/连接(与JavaFX相比)
我对编程非常陌生,从Java开始,到JavaFX作为GUI开发,刚刚用Android Studio解决了Android应用程序开发问题 来自JavaFX及其将UI连接到后端控制器的概念,我对Android UI与Java后端(控制器、模型)更复杂的交互有点困惑 我的场景:我用JavaFX编程了一个游戏应用程序,它运行得非常好。我应用了MVC概念,而我使用FXML构建UI,有一个Controller.java类,它通过@FXML将所有UI元素“连接”到我的Controller类,然后我可以通过控制器中的cross方法访问我的UI元素(例如,从滑块读取值或更改它们),如: 现在:在Android(使用Android Studio)中,我尝试应用相同的概念/想法,但失败了,因为很明显,不同的视图、按钮、文本都有各自的类,它们需要相互转换,以便使用它们的内容 因此,我遵循了Android的概念,并尝试在MainActivity类中声明所有UI元素,如下所示:Java:Android UI(Android Studio)和Java后端(模型)的交互/连接(与JavaFX相比),java,android,javafx,Java,Android,Javafx,我对编程非常陌生,从Java开始,到JavaFX作为GUI开发,刚刚用Android Studio解决了Android应用程序开发问题 来自JavaFX及其将UI连接到后端控制器的概念,我对Android UI与Java后端(控制器、模型)更复杂的交互有点困惑 我的场景:我用JavaFX编程了一个游戏应用程序,它运行得非常好。我应用了MVC概念,而我使用FXML构建UI,有一个Controller.java类,它通过@FXML将所有UI元素“连接”到我的Controller类,然后我可以通过控制
public class MainActivity extends AppCompatActivity {
EditText inputText = (EditText) findViewById(R.id.text1);
EditText outputText = (EditText) findViewById(R.id.textOutput);
Button enterButton = (Button) findViewByID(R.id.button1);
...
这是因为我想在MainActivity中的不同方法中重用(简单地访问/更改)它们。
由于NullPointerException,上述方法失败。我尝试使用初始化各个对象,例如:
Button button1 = new Button();
但这也不起作用
但是,如果我在MainActivity的方法中使用上述方法,则效果良好:
public class MainActivity extends AppCompatActivity {
public void enterMessage(View view){
EditText inputText = (EditText) findViewById(R.id.text1);
String textOutput = inputText.getText().toString();
EditText outputText = (EditText) findViewById(R.id.textOutput);
outputText.setText(textOutput);
}
我可以读取和更改我的UI对象
然后我想到在MainActivity中创建一个静态的“controller方法”,这样我就可以从MainActivity中的任何其他方法访问UI元素。但是这个力不起作用,因为
findViewById()
不支持静态方法
因此,在尝试了这些不同的方法之后,我现在看到的唯一方法是创建新对象并将它们转换为所需的变量,如:
EditText inputText = (EditText) findViewById(R.id.text1);
String textOutput = inputText.getText().toString();
在我想在MainActivity中创建的每个方法中
现在我的问题是:与JavaFX相比,Android UI类的概念真的更复杂吗?还是我只是在一些基础方面弄错了?任何关于最佳实践的提示都将不胜感激。:)
谢谢大家! 更复杂的是Android应用程序内部的视图。例如,在Java的Swing中,没有视图/控制器的生命周期,我也不知道JavaFX。尽管编程语言不同,但底层平台也不同 Android来自这样一个环境:设备几乎没有任何可用内存,计算能力也非常有限。为此,Android试图尽可能节省资源 您必须侦听活动生命周期事件,因为它们可能会影响视图对象是否仍然存在。例如:您可以让您的
MainActivity
实例运行,但只需在横向模式下转动手机,您当前的MainActivity
就会消失,并获得具有更新视图的新实例
因此,在Android应用程序开发过程中,您会发现自己编写了大量的findviewbyd
。但是有一些解决方案可以让Android开发变得更容易一些
通过查看您使用@FXML
的经验,我建议您看看哪个注释处理器可以为您处理查找viewbyid
,它可能会对您有很大帮助。看起来使用视图的方式类似
还可以看看,因为它们利用了大量样板代码,并允许您专注于您想要编写的内容。特地
我还强烈建议您研究一下Kotlin,因为它运行在JVM上,您可以将其用于Android和Java开发。事实证明,这是一种非常有趣的语言,而且就完成某项任务所需编写的代码量而言,它的使用效率相当高。谢谢@Some random it boy的指导 实际上我的问题/困惑现在已经解决了。为了简化GUI后端交互,我可以推荐使用新的视图绑定功能 视图绑定()在Android Studio 3.6 Canary 11+中提供。现在这意味着要安装Android Studio的预最终版本,但这样就可以了 视图绑定是一种标准化功能,它实际上提供了与黄油刀类似的功能。根据黄油刀网站,“视图绑定”似乎是功能明智的继任者 如何使用视图绑定的说明包含在上面的链接中。遵循这些步骤,您可以与Android GUI进行类似于JavaFX中的方法的交互
EditText inputText = (EditText) findViewById(R.id.text1);
String textOutput = inputText.getText().toString();