我正在使用自定義對話框片段制作應用程式。我test_parameters.xml為這個對話框片段創建了一個單獨的 xml 檔案,但是當我嘗試通過它們的 id 參考那里的視圖時,Android Studio 沒有看到它們。只有來自 activity_main 的視圖可用。是什么原因,我該如何解決?

主活動.kt:
package com.example.meltflowratecalculator
import...
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
lateinit var methodsSpinner: Spinner
lateinit var timeSpinner: Spinner
lateinit var result: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.settingsButton.setOnClickListener {
var dialog = CustomDialogFragment()
dialog.show(supportFragmentManager, "customDialog")
}
}
}
CustomDialogFragment.kt:
package com.example.meltflowratecalculator
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.DialogFragment
class CustomDialogFragment : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
var rootView: View = inflater.inflate(R.layout.test_parameters, container, false)
return rootView
}
}
活動_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@ id/settings_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:layout_margin="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
test_parameters.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@ id/result"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/testing_method_title"
android:layout_marginTop="16dp"
android:layout_marginStart="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Spinner
android:id="@ id/methods"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:entries="@array/methods"
android:minHeight="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/result" />
</androidx.constraintlayout.widget.ConstraintLayout>
uj5u.com熱心網友回復:
您必須創建一個擴展 DialogFragment 的類。在那里你需要設定 id。
uj5u.com熱心網友回復:
您binding通過呼叫獲取該物件ActivityMainBinding#inflate-ActivityMainBinding是從activity_main.xml(因此名稱)自動生成的。它只包含該布局檔案中視圖的系結(以及它include的任何但更高級的東西)——現在你只有一個帶有 id 的視圖settings_button。這就是為什么settingsButton您可以在系結檔案中看到的唯一屬性。
您可以使用findViewById視圖層次結構搜索 Fragment 的視圖 - 但這通常是一個壞主意,Activity 不應該了解 Fragment 的內部作業或布局。Fragment 應該自己處理所有這些,或者直接將資料傳遞給它的宿主 Activity,或者將資料放在 Activity 可以訪問它的地方(比如ViewModel,或者在 Navigation backstack 條目中)
基本上將所有功能放在里面DialogFragment- 您可以使用TestParametersBinding與您在活動中相同的方式來擴展對話框的布局,并且您可以訪問其中的所有視圖,并處理對話框所做的任何事情。活動應該只是顯示它,并對它發回的結果做一些事情
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/337090.html
標籤:安卓 xml 科特林 android-dialogfragment
上一篇:將ElementTree樹寫入磁盤時如何保留html標簽?
下一篇:如何使用遞回函式操作串列?
