android - Kotlin 从 Fragment 访问项目
问题描述
我是 Kotlin 的新手。我创建了一个空白活动,添加了一个 SeekBar,并且我能够覆盖它的方法以获得我想要的功能。但是,如果我创建一个选项卡式活动,则在使用相同的代码时我无法这样做。我无法弄清楚如何访问片段中的项目。
我修改了我的 gradle 构建以包括id 'kotlin-android-extensions'
我在 fragment_main.xml 中添加了 SeekBar 和 TextView
<SeekBar
android:id="@+id/strandsSpeed"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:min="0"
android:max="1023"
android:scaleX="1.5"
android:scaleY="1.5"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="TextView"
android:textSize="36sp"
app:layout_constraintTop_toBottomOf="@+id/strandsSpeed"
tools:layout_editor_absoluteX="173dp" />
我在 PlaceholderFragment.kt 中修改了 onCreate()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
strandsSpeed?.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(strandsSpeed: SeekBar, progress: Int, fromUser: Boolean) {}
override fun onStartTrackingTouch(strandsSpeed: SeekBar) {}
override fun onStopTrackingTouch(strandsSpeed: SeekBar) {
textView.text = getString(R.string.test)
}
})
pageViewModel = ViewModelProvider(this).get(PageViewModel::class.java).apply {
setIndex(arguments?.getInt(ARG_SECTION_NUMBER) ?: 1)
}
}
我在 MainActivity.kt 中尝试了相同的代码。没有结果。我还在 MainActivity.kt 中尝试了敬酒。没有结果。没有片段,代码可以正常工作。覆盖 onProgressChanged() 时也没有结果。我的猜测是由于 strandsSpeed 和 textView 当前位于片段中。
解决方案
我将其setOnSeekBarListener()
移至onCreateView()
并使用了充气机:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val inf = inflater.inflate(R.layout.fragment_strands, container, false)
inf.strandsSpeed.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener {
override fun onProgressChanged(strandsSpeed: SeekBar, progress: Int, fromUser: Boolean) {
txtView.text = progress.toString()
}
override fun onStartTrackingTouch(strandsSpeed: SeekBar) {}
override fun onStopTrackingTouch(strandsSpeed: SeekBar) {}
})
return inf
}
推荐阅读
- python-3.x - pandas sort_values 返回排序错误的数据框
- excel - 检查预约响应状态
- c# - assembly file load error when running application as windows service
- java - 发送后 10 秒使用 JDA 删除消息
- python - size_hint_max_x 没有设置宽度的最大限制
- json - Json-Schema 中的 OneOf 选择了一个案例及其否定
- javascript - 找到无限循环中询问的数字的算术平均值
- reactjs - 您将如何引用具有状态对象的数组来对其执行数组方法?
- c# - 如何在 Twitter 适配器上实现实体框架脚本存储
- python - 使用漂亮的汤在多个 DIV 中提取正确的链接。这不是重复的问题