Как обновить текстовое представление фрагмента внутри ViewPager (Kotlin) - PullRequest
0 голосов
/ 10 мая 2019

Предположим, у меня есть строка поиска в действии, чтобы изменить размер шрифта 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 );
}

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Если ваш PagerAdapter не FragmentStatePagerAdapter, вы можете получить свой фрагмент (например, FragmentOne) и обновить масштабированный размер следующим образом:

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

Если это невозможно, отметьте здесь , чтобы узнатькак получить экземпляр Fragment в viewpager, а затем просто вызвать его метод в активности.

0 голосов
/ 10 мая 2019

Вы должны реализовать интерфейс обратного вызова во фрагменте, сохраняя ссылку на этот обратный вызов в своей деятельности.Таким образом, когда вы вызываете, скажем, функцию changeFontSize (fontSize: Int) из вашей деятельности, будет вызвана реализация этого метода вашим фрагментом.Проверьте этот ответ

Имейте в виду, что при использовании ViewPager вам также придется проверять текущую видимость фрагмента.Проверьте это ответ

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...