【问题标题】:Kotlin Access Item From FragmentKotlin 从 Fragment 访问项目
【发布时间】:2021-04-13 01:18:51
【问题描述】:

我是 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 当前位于片段中。

【问题讨论】:

    标签: android kotlin android-fragments


    【解决方案1】:

    我将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
    }
    

    【讨论】:

    • 感谢@double-beep 为使我符合指导方针所做的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 2020-11-27
    相关资源
    最近更新 更多