首页 > 解决方案 > 如何在 kotlin 文件中使用字符串资源

问题描述

我刚开始制作 Android 应用程序,我想正确使用字符串资源文件。我已经使用本指南创建了一个选项卡式布局,它有效,但我现在正在尝试将字符串资源用于选项卡名称。我一直收到错误消息。

在我的 res/values/strings.xml 文件中:

<?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

我找不到有关此错误的任何信息,也没有尝试修复它。谁能帮我?我找到的所有使用资源文件的指南都没有使用相同的代码出现错误。

标签: androidkotlin

解决方案


首先,摆脱:

import android.provider.Settings.Global.getString

因为它不属于这里并且使您感到困惑。

这会将您的错误更改getString().FragmentPagerAdapter

任何一个:

  • 将字符串本身传递到 yourMyPagerAdapter中,例如在其构造函数中,或者

  • Context将 a (例如 your )传递给Activityyour MyPagerAdapter,例如在其构造函数中,然后调用getString()Context


推荐阅读