【问题标题】:How to get String Resource within ViewPager Adapter?如何在 ViewPager 适配器中获取字符串资源?
【发布时间】:2013-09-02 17:55:02
【问题描述】:

我试图为我的浏览器设置标题,但我似乎无法让它工作。我试过 Resources.getSystem().getString(R.string.title1);并且还试图传递一个上下文。谁能帮帮我?

public class ViewPagerAdapter extends FragmentPagerAdapter {
    final int PAGE_COUNT = 3;
    Context context;

    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public Fragment getItem(int position) {
        return PageFragment.create(position + 1);
    }

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {

        case 0:
            return Resources.getSystem().getString(R.string.title1);

        case 1:
            return Resources.getSystem().getString(R.string.title1);

        case 2:
            return Resources.getSystem().getString(R.string.title1);
        }

        return null;
    }
}

Logcat:

09-02 17:40:33.160: E/AndroidRuntime(3116): FATAL EXCEPTION: main
09-02 17:40:33.160: E/AndroidRuntime(3116): android.content.res.Resources$NotFoundException: String resource ID #0x7f050003
09-02 17:40:33.160: E/AndroidRuntime(3116):     at android.content.res.Resources.getText(Resources.java:230)
09-02 17:40:33.160: E/AndroidRuntime(3116):     at android.content.res.Resources.getString(Resources.java:314)

【问题讨论】:

    标签: android android-viewpager android-resources


    【解决方案1】:

    如果您尝试从活动外部访问字符串资源,那么您需要将上下文传递给该类(您说您已经完成了),然后调用

    String str = context.getResources().getString(R.string.some_string);
    

    同时检查您的strings.xml 文件以确保您正确使用了字符串ID。 如果您使用的是 android studio,您应该能够简单地开始输入 R.string.,然后它将显示来自 strings.xml 文件的建议。如果您在此处看不到您的资源,那么这可能表明您存储资源的方式存在问题,而不是您尝试访问它们的方式。

    【讨论】:

      【解决方案2】:

      好吧,根据您的错误消息您没有带有您请求的 ID 的字符串

      可能是您支持多语言,并且只有这个 某种特定语言的 String-ID?

      不管怎样,这行代码:

      String yourstring = getResources().getString(R.string.yourstring);
      

      是如何从资源中获取字符串。只要您在扩展Context 的类中,就可以调用getResources(),例如Activity

      【讨论】:

      • 无法访问 getResources()
      【解决方案3】:

      您应该从活动的上下文中调用 getString,将您的代码更改为

      public class ViewPagerAdapter extends FragmentPagerAdapter {
          final int PAGE_COUNT = 3;
          Context context;
      
          public ViewPagerAdapter(FragmentManager fm, Context nContext) {
              super(fm);
              context = nContext;
          }
      
          @Override
          public int getCount() {
              return PAGE_COUNT;
          }
      
          @Override
          public Fragment getItem(int position) {
              return PageFragment.create(position + 1);
          }
      
          @Override
          public CharSequence getPageTitle(int position) {
      
              switch (position) {
      
              case 0:
                  return context.getString(R.string.title1);
      
              case 1:
                  return context.getString(R.string.title1);
      
              case 2:
                  return context.getString(R.string.title1);
              }
      
              return null;
          }
      }
      

      【讨论】:

        【解决方案4】:

        只需使用可用的:getContext().getString(resId) 喜欢:

        getContext().getString(R.string.title1)
        

        它对我有用。

        【讨论】:

          【解决方案5】:

          如果你的viewPager Adapter中不允许调用getResources(),需要在父activity中声明为静态变量

          【讨论】:

            【解决方案6】:

            您正试图在您的Resources 中获取String 而没有获得Resources。所以试着用getResources()Context 拉你的Resources

            如果您在ActivityService 内,那么上下文就在那里。如果在外面,请先尝试用getApplicationContext()Context,然后拉资源,最后拉你的String

            根据您的代码,如果resources 和提到的String id 被正确提取,这些 sn-p 不会抛出任何异常。

             public CharSequence getPageTitle(int position) 
              {
                switch (position) 
                {
                case 0:
                       return getResources().getString(R.string.title1);
                case 1:
                       return getResources().getString(R.string.title1);
                case 2:
                       return getResources().getString(R.string.title1);
                 }
                return null;
              }
            

            【讨论】:

              【解决方案7】:

              根据我的经验,视图寻呼机不会一致地将每个文本显示到分配的屏幕上。我需要为每个页面创建单独的布局并从布局中分配文本,因此在翻转页面时,每个页面都会显示带有文本的布局。

              【讨论】:

                【解决方案8】:

                试试:

                getApplicationContext().getResources().getString(R.String.title1);
                

                【讨论】:

                  【解决方案9】:

                  在 Kotlin 中,我通过向适配器发送上下文来做到这一点,如下所示:

                  class FmAdapter(val context: Context, fm: FragmentManager) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
                  
                      private val fragments = arrayListOf<Fragments>()
                  
                      init {
                          fragments.add(Fragments(R.string.title1, FragmentOne()))
                          fragments.add(Fragments(R.string.title2, FragmentTwo()))
                      }
                  
                      override fun getCount(): Int = fragments.size
                  
                      override fun getItem(position: Int): Fragment = fragments[position].fragment
                  
                      override fun getPageTitle(position: Int): CharSequence? = context.getString(fragments[position].title)
                  }
                  

                  带数据类:

                  data class Fragments(@StringRes val title: Int, val fragment: Fragment)
                  

                  以及来自活动的简单调用,例如:

                  rv.adapter = FmAdapter(this, supportFragmentManager)
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-03-19
                    • 2010-10-14
                    • 2021-10-13
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多