Как использовать строковые ресурсы в файле kotlin - PullRequest
0 голосов
/ 19 марта 2020

Я только начинаю создавать Android приложений и хочу правильно использовать файл строковых ресурсов. Я создал макет с вкладками, используя это руководство , которое работает, но сейчас я пытаюсь использовать строковые ресурсы для имен вкладок. Я продолжаю получать сообщение об ошибке.

В моих файлах res / values ​​/ strings. xml file:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <string name="timeline_tab_name">Timeline</string>
</resources>

Теперь это работает, когда я ссылаюсь на имя в xml файл, как таковой.

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/timeline_tab_name"
        android:textSize="40sp"/>

Это MainActivity.kt

package com.*****.*****

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fragmentAdapter = MyPagerAdapter(supportFragmentManager)
        viewpager_main.adapter = fragmentAdapter

        tabs_main.setupWithViewPager(viewpager_main)
    }
}

Моя ошибка возникает в MyPagerAdapter.kt

package com.*****.*****

import android.provider.Settings.Global.getString
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter

class MyPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {

    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> FirstFragment()
            1 -> SecondFragment()
            else -> {
                return ThirdFragment()
            }
        }
    }

    override fun getCount(): Int {
        return 3
    }

    override fun getPageTitle(position: Int): CharSequence {

        val timeline_name: String = getString(R.string.timeline_tab_name)

        return when (position) {
            0 -> timeline_name
            1 -> "Second Tab"
            else -> "Third Tab"
        }
    }
}

Ошибка, когда я ' м пытаюсь получить ресурс R.string.timeline_tab_name. Об этом говорится во всплывающей подсказке:

Type mismatch.
Required:  ContentResolver!
Found:     Int

Я не могу найти информацию об этой ошибке, и все, что я пробовал, исправляет ее. Может кто-нибудь мне помочь? Все руководства, которые я нашел для использования файла ресурсов, не получают ошибку, используя тот же код.

1 Ответ

1 голос
/ 19 марта 2020

Во-первых, избавьтесь от:

import android.provider.Settings.Global.getString

, поскольку он здесь не принадлежит и сбивает вас с толку.

Это изменит вашу ошибку на то, что нет * Функция 1007 * доступна в FragmentPagerAdapter.

Либо:

  • Передача самой строки в ваш MyPagerAdapter, например, в ее конструкторе, или

  • Передайте Context, например, Activity, в ваш MyPagerAdapter, например, в его конструкторе, и вызовите getString() для этого Context

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