Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Android UI(Android Studio)和Java后端(模型)的交互/连接(与JavaFX相比)_Java_Android_Javafx - Fatal编程技术网

Java:Android UI(Android Studio)和Java后端(模型)的交互/连接(与JavaFX相比)

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类,然后我可以通过控制

我对编程非常陌生,从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元素,如下所示:

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();