JetPack中思考的简短介绍
#android #组成

免责声明

这不是撰写的深入教程。我不会介绍您需要添加的依赖项,... - 您可以在这里找到Android Developers - Adding Jetpack Compose to your app

这篇文章是对喷气背包的简短介绍,主要是关于它与其他UI框架不同的原因。

您可能已经猜到了,JetPack Compose是一个UI框架。它与Winforms,WPF,Swing,Tkinter等更常见的UI框架不同的是,它是声明性的UI框架。那是什么意思?简而言之:您声明了一个UI,仅此而已,您已经不在图片中。您不能像在非确定框架中一样与UI组件进行编程“交互”。

例如,如果您想通过单击按钮更改文本视图的文本,则您将在非决定性的UI框架中进行类似的操作。

StackPanel stackPanel = new StackPanel();
TextBox textBox = new TextBox();
stackPanel.Children.Add(textBox)
Button button = new Button();
stackPanel.Children.Add(button);
button.Click += (sender, ea) => { textBox.Text = "Button Pressed"; }

在这里,我们创建UI并直接与其他UI元素进行交互,我们可以更改它们的属性。这不起作用。尽管您可以继续引用组合物(UI组件),但您不能更改其属性。

val textComposable = Text(text = "Hello Compose.")
textComposable.text = "This won't compile, because there's no text property."

组合围绕单向数据流(UDF)模式设计。 UI触发事件,使您可以更改状态,从而触发UI的重新组件(〜重建/绘制UI)。

    +---------------+
    |      UI       |
    +---------------+
         |     ^
  event  |     |  state
         v     |
    +---------------+
    |     State     |
    +---------------+    

仅使用了非定制的UI框架,该用例最有助于我理解如何思考作曲的方法是显示对话框。以下可合并函数确实可以做到这一点。

@Composable
fun SampleScreen() {
  val showDialog = remember { mutableStateOf(false) }   // changes to states trigger recomposition 
  TextButton(onClick = { showDialog.value = true }) {
    Text(text = "Click to show the dialog")
  }
  if (showDialog.value) {
    Dialog(onDismissRequest = { showDialog.value = false }) {
      Text(text = "Tap outside the dialog to close it.")
    }
  }
}

这里发生了什么?首次将组合作用执行时,showDialog变量设置为false,因此我们不会将对话框添加到GUI中。如果我们单击该按钮并将showDialog的值设置为true,我们会触发合并的重组(B/C showDialog是可变状态)。组合是“重新执行的”,这次围绕showDialogtrue,我们显示对话框。

记住我

remember允许一个可组合功能存储在内存中的信息,因此该信息在重新组件后仍可获得。

  • 如果我们只写val showDialog = mutableStateOf(false),则将重新组装UI,但是我们将将showDialog重新定位为false,因此不显示对话框。
  • 和kude11甚至不会触发重新组件,因此也没有对话。

而不是remember,我们也可以使用视图模型。

就是这样的简短介绍。

继续挣扎。