【问题标题】:How to update textview of a fragment inside a ViewPager (Kotlin)如何更新 ViewPager (Kotlin) 中片段的文本视图
【发布时间】:2019-05-10 01:31:27
【问题描述】:

假设我在活动中有一个搜索栏来更改片段的 textview 字体大小。我应该通过什么方法?

我有一个活动。这包括一个视图寻呼机。视图寻呼机有一个寻呼机适配器。对于分页适配器中的每个项目,我们创建片段的新实例。当我拖动 SeekBar 时,我想将值传递到片段上。我已经应用了接口回调并传递了参数包。但是,在实现和测试方面,字体大小不会改变。

您能告诉我如何将一个值从活动的搜索栏传递到寻呼机适配器中的片段吗?

这是我的工作:

class ChapterActivity : AppCompatActivity() , ViewPager.OnPageChangeListener  {

...


        val listener =  object : SeekBar.OnSeekBarChangeListener  {
            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {

                val scaledSize =  progress * 0.6 + minimumValue
                println("scaledSize : $scaledSize"  )
                println("scaledSize : ${scaledSize.toFloat()}"  )
                //txt_chapter_content.setTextSize(TypedValue.COMPLEX_UNIT_DIP, scaledSize .toFloat() );
                val prefs = getPreferences(Context.MODE_PRIVATE)
                val ed = prefs.edit()
                ed.putFloat("fontsize", scaledSize.toFloat())
                ed.apply()

                val myBundle = Bundle()
                myBundle.putFloat("fontsize" , scaledSize.toFloat() )

                        mAboutDataListener!!.onDataReceived(scaledSize.toFloat())



            }

            override fun onStartTrackingTouch(seekBar: SeekBar?) {

            }

            override fun onStopTrackingTouch(seekBar: SeekBar?) {

            }
        }



            chapterPagerAdapter = ChapterPagerAdapter(supportFragmentManager, chapters)
       // Set the Adapter and the TabLayout forward the ViewPager
            chapterViewPager.adapter = chapterPagerAdapter
            chapterViewPager.addOnPageChangeListener(this);

片段:

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout forward this fragment
        val view = inflater.inflate(com.books.learn.ddy.blinkist.R.layout.content_chapter, container, false)
        val titleTextView = view.findViewById<TextView>(R.id.txt_chapter_title)
        val contextTextView = view.findViewById<TextView>(R.id.txt_chapter_content)

contextTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, floatSize )

override fun onDataReceived(fontSize: Float) {
    contextTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, fontSize );
}

【问题讨论】:

    标签: android android-fragments kotlin


    【解决方案1】:

    如果你的PagerAdapter不是FragmentStatePagerAdapter,你可以获取你的Fragment(例如FragmentOne)并更新缩放大小如下:

    val page = getSupportFragmentManager().findFragmentByTag("android:switcher:${R.id.pager}:${pagerPosition}"
    if (page != null) {
       ((FragmentOne)page).onDataReceived(scaledSize.toFloat())   
    }
    

    如果不可行,查看here了解如何在viewpager中获取Fragment实例,然后在activity中调用它的方法。

    【讨论】:

      【解决方案2】:

      我在https://stackoverflow.com/a/60427448/2102794 发布了一个类似问题的答案。

      片段

      class SampleFragment : Fragment(), BaseFragmentInteraction {
          override fun updateSeekBarProgress(progress: Int) {
              Toast.makeText(activity!!, data, Toast.LENGTH_SHORT).show()
          }
      }
      

      界面

      interface BaseFragmentInteraction {
          fun updateSeekBarProgress(progress: Int)
      }
      

      SeekBar 回调:

      val listener = object : SeekBar.OnSeekBarChangeListener {
          override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
              val fragmentItem = (view_pager.adapter as FragmentPagerAdapter).getItem(view_pager.currentItem)
              (fragmentItem as BaseFragmentInteraction).updateSeekBarProgress(progress)
          }
      }
      

      【讨论】:

        【解决方案3】:

        您应该在片段中实现回调接口,同时在您的活动中保留此回调的引用。这样,当您从您的活动中调用一个函数 [假设 changeFontSize()] 时,您的片段对此方法的实现将被调用。检查这个answer

        请记住,在使用 ViewPager 时,您还必须检查当前片段的可见性。检查这个answer

        希望这会有所帮助。

        【讨论】:

        • 我之前应用过这个监听器。没有效果。我已经编辑了我的代码。希望有人能回答
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        相关资源
        最近更新 更多