如果Android使用XML布局将Java代码与应用程序布局分开,为什么我必须在Fragments布局中指定Java类,如下面的代码?在这种情况下,如果我改变类名(Java代码),我也必须改变XML布局。这对我来说听起来不那么独立。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal" >
<fragment
android:id="@+id/titles"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
class="course.examples.fragments.staticlayout.TitlesFragment" />
<fragment
android:id="@+id/details"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="2"
class="course.examples.fragments.staticlayout.QuotesFragment" />
</LinearLayout>
答案 0 :(得分:1)
为什么我必须在Fragments布局中指定Java类,如下面的代码?
布局资源中的绝大多数XML元素都指定了Java类名。在您的示例中,@IBOutlet weak var lstPriority: UIPickerView!
// Array for picker wheel items
let lstPriorityOptions = ["Low", "Medium", "High"]
// Function to get selected value from picker wheel
public func GetSelected() -> String {
let pickerView: UIPickerView
let valueSelected = lstPriorityOptions[row] as String
return valueSelected
}
// Button click event, this is where I will be calling the above function
@IBAction func btnAdd(_ sender: Any) {
if txtNewItem.text != "" {
let newToDoItem = ToDoItem(ToDoItemText: txtNewItem.text!, ToDoItemPriority: GetSelected())
ToDoItemList.append(newToDoItem)
txtNewItem.text = ""
}
}
是Java类名。
LinearLayout
逻辑查看元素名称并将其视为Java类名,除了一些专门的元素名称,如LayoutInflater
。有时,对于来自库(例如fragment
)或您自己的类(例如android.support.constraint.ConstraintLayout
)的类,该Java类名称是完全限定的。如果Java类名称没有包(例如com.commonsware.cwac.RecyclerViewEx
),LinearLayout
会在一些众所周知的Java包(例如LayoutInflater
)中查找它。
在android.widget
的情况下,类名恰好采用<fragment>
属性的形式,可能有助于class
区分视图和片段。
在这种情况下,如果我改变了类名(Java代码),我也必须改变XML布局。
正确。这与布局资源中的大多数其他元素没有什么不同。
如果Android使用XML布局将Java代码与应用程序布局分开
Android使用布局资源来帮助处理不同的配置(例如,纵向/横向,小/大屏幕)。其次,布局资源有助于将UI配置与Java代码隔离开来,这在一定程度上更容易让IDE等工具进行操作。
答案 1 :(得分:0)
我将向CommonWare&#39;添加更多简单的解释。答案
fragment
在XML
中使用Button
标记就像另一个视图(ImageView
,fragment
.....)。在这种情况下,您不必将Java code
添加到fragment
中的布局中。系统会自动将fragment
添加到您的布局中,fragment
将表现为静态,因为您无法在运行时将其替换为其他fragment
。要在运行时更改片段,您必须添加{{1}在Java code
中自己进入像FrameLayout
这样的片段容器。