【问题标题】:How can I access and retrieve data from an interface inside a fragment?如何从片段内的接口访问和检索数据?
【发布时间】:2021-11-21 08:41:24
【问题描述】:

我必须在片段中访问我的界面,但我该怎么做呢?另外,当我调用名为getRandomComputerDetails的函数时,我必须将接口作为参数传递

界面:

interface ResultListener {
    fun onSuccess(any: Any?)
    fun onError(e: Throwable?)
}

片段:

class HomeFragment : Fragment() {
    private lateinit var binding: FragmentHomeBinding
    private var _binding: FragmentHomeBinding? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // API CALL
        binding.buttonHomeFragmentApiCall.setOnClickListener {
            this.context?.let { getRandomComputerDetails(it, /* I HAVE TO PASS MY INTERFACE HERE*/) }
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

【问题讨论】:

  • 你在哪里实现这个接口?如果您只想知道getRandomComputerDetails 的结果,那么在onClickListener 中创建新的接口实例
  • 在片段外的单独文件夹中。我想知道如何正确访问存储在我的界面中的结果。如果你知道,你能解释一下我该怎么做吗?谢谢
  • 请不要说“单独的文件夹”正在实现您的界面,这表明您缺乏关于 Kotlin/Java 编码的基本知识...用本地匿名实现发布答案

标签: android kotlin android-fragments interface


【解决方案1】:

创建接口的本地匿名实现

val myInterface = object : MyInterface {
    
    override fun onSuccess(any: Any?) { ... }

    override fun onError(e: Throwable?) { ... }
}
binding.buttonHomeFragmentApiCall.setOnClickListener {
    this.context?.let { getRandomComputerDetails(it, myInterface) }
}

【讨论】:

  • 由于按钮是这个片段视图的一部分,requireContext() 在这里使用是安全的。
猜你喜欢
  • 2018-11-03
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多