android - 如何从android中的片段中获取静态记录器?
问题描述
这是我想做的事情:
我有一个基本上没有任何 GUI 的应用程序,只是在后台发生了很多事情(应用程序基本上只是相机的 LAN 遥控器,所以我有相机类、网络类等在后台运行。但是, 我想TextView
在我的 GUI 上有一个简单的, 它将显示某种日志。我所有的类都应该有权访问这个日志并添加/写入东西。由于我的 GUI 只包含一个文本视图,我不想要打扰 MVVM,这将是我的首选 GUI 模式。
到目前为止我所拥有的:
对于 TextView,我创建了一个片段:
class GUIFragment : Fragment(R.layout.gui_fragment) {
// other class members
private lateinit var logger : Logger
private var _binding: GuiFragmentBinding? = null
private val guiBinding get() = _binding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
//set up bindings
_binding = GuiFragmentBinding.inflate(inflater, container, false)
guiBinding.logviewer.movementMethod = ScrollingMovementMethod()
logger = Logger(guiBinding.logviewer)
return guiBinding.root
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
// other logic
companion object {
fun getLogger() : Logger?{
return null // or my logger instance
}
}
}
这里的想法是有一个静态方法,它返回片段logger
实例或 null (因为 GUI 根本没有改变,它实际上应该总是返回logger
实例。它logger
本身是片段的成员并获得绑定TextView
传递给它的构造函数。但是,我认为伴随对象无法访问类成员(这是有道理的,因为它们不是静态的)?我的logger
成员也应该是静态的,但是我应该如何传递TextView
给它呢?
为了完整起见,这里也是Logger
类:
class Logger (_tv : TextView) {
private val maxLogLines = 100
private val tv = _tv
suspend fun log(msg: String?) = withContext(Dispatchers.Main){
var logtext = tv.text.toString()
logtext = logtext.plus("${msg}\n")
var split = logtext.split("\n")
if (split.count() >= maxLogLines) {
logtext = split.slice(1 until (maxLogLines - 1)).joinToString("\n")
}
tv.text = logtext
}
}
解决方案
推荐阅读
- angular - 如何在 Angular 和 rxjs 中的 Obersavble 类型的数组中查找或添加项目?
- python - 消息:使用 selenium python 向 Youtube 的搜索栏发送密钥 [search_bar.send_keys(course_name)] 时元素不可交互错误
- python - 正确的自定义可写(和可读)ModelSerializer 字段
- java - Apache Beam GroupByKey 重复事件
- javascript - 单击按钮时如何生成一组数组,而不会使第一个消失?
- python - 我正在运行的 python 版本之间的混淆
- python - python列表操作来比较元素的一部分而不是完整的元素
- python - 如何从 python 列表中的字符串中删除不需要的 html 代码?
- python - 没有找到任何参数的 Django NoReverseMatch 错误。已尝试 1 种模式
- java - 在空对象引用上获取 NullPointerException int android.media.MediaPlayer.getDuration()'