所以,我正在嘗試從 kotlin 合成遷移到 Jetpack 視圖系結。
這是 kotlin 合成代碼(作業正常),它只是在片段的父活動中將 TextView 的可見性設定為不可見。
import kotlinx.android.synthetic.main.activity_main.*
class FirstFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_first, container, false)
requireActivity().textView.visibility = View.INVISIBLE
return view
}
}
這是我正在做的遷移:
import com.mypc.myapp.databinding.FragmentFirstBinding
import com.mypc.myapp.databinding.ActivityMainBinding
class FirstFragment : Fragment() {
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentFirstBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textView.visibility = View.INVISIBLE
binding.textview.setOnClickListener {
Navigation.findNavController(view).navigate(R.id.goto_secondfragment)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
我在“textview”處收到“未解決的參考”錯誤:
binding.textView.visibility = View.INVISIBLE
并在:
binding.textview.setOnClickListener {
Navigation.findNavController(view).navigate(R.id.goto_secondfragment)
}
顯然編譯器無法找到 Activity 中的 TextView 我添加了這一行:
import com.mypc.myapp.databinding.ActivityMainBinding
uj5u.com熱心網友回復:
由于您binding是私人的,MainActivity您可以參考您textView的MainActivity唯一。要顯示/隱藏此視圖,FirstFragment您可以在其中創建一個公共函式MainActivity并從您的FirstFragment.
class MainActivity: AppCompatActivity {
private var _binding: ActivityMainBinding? = null
private val binding get() = _binding!!
fun showHideTextView(visible: Boolean) {
binding.textView.isVisible = visible
}
}
在您的片段中,您可以呼叫:
(requireActivity() as MainActivity).showHideTextView(false) // This will hide the textView
uj5u.com熱心網友回復:
首先,您應該在作為 MainActivity 的父類的 baseActivity 中定義活動視圖系結的實體,然后定義更改文本視圖的方法,例如 'showTextView' ,然后在基片段類中使用強制轉換初始化基本活動實體onAttach 方法中的背景關系物件。我為您提供一些代碼:
abstract class BaseRegisterActivity : BaseActivity() {
//---
protected lateinit var binding: ActivityRegisterBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_register)
//---
}
fun showTextView() {
binding.textView.visibility = View.VISIBLE
}
}
abstract class BaseLoginFragment : Fragment(), Injectable {
//--
lateinit var baseActivity: BaseRegisterActivity
override fun onAttach(context: Context) {
super.onAttach(context)
baseActivity = context as BaseRegisterActivity
}
//--
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/364484.html
