2013-09-02 22 views
5

Tôi đang cố gắng đặt tiêu đề cho người xem của mình, tôi dường như không làm cho nó hoạt động. Tôi đã thử hàm Resources.getSystem(). GetString (R.string.title1); và cũng cố gắng vượt qua một ngữ cảnh. Có ai giúp tôi không?Làm cách nào để nhận được tài nguyên chuỗi trong bộ điều hợp ViewPager?

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) 

Trả lời

9

Vâng, theo thông báo lỗi của bạn bạn không có một String với ID bạn đang yêu cầu.

Nó có thể được rằng bạn đang hỗ trợ ngôn ngữ đa và chỉ có loại String-ID cho một ngôn ngữ cụ thể?

Anyways, dòng mã này:

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

là làm thế nào để có được một String từ sự.

0

Bạn đang cố gắng tìm nạp String bên trong Resources mà không cần đạt được Resources. Vì vậy, hãy thử kéo Resources của bạn bằng getResources() bằng Context của bạn.

Nếu bạn ở bên trong Activity hoặc Service thì ngữ cảnh sẽ có. Nếu bên ngoài sau đó cố gắng kéo Context trước tiên bằng getApplicationContext() và trên đó kéo các tài nguyên và kéo String của bạn ở cuối trên đó.

Theo mã của bạn, các đoạn mã này sẽ không ném bất kỳ ngoại lệ nào nếu resources và được đề cập đến String id được kéo đúng cách.

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; 
    } 
28

bạn nên gọi getString từ bối cảnh của một hoạt động, thay đổi mã của bạn để

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; 
    } 
} 
0

Hãy thử getApplicationContext() getResources () .getString (R.String.title1).

0

Theo kinh nghiệm của tôi, máy nhắn tin lượt xem sẽ không hiển thị từng văn bản cho màn hình được chỉ định một cách nhất quán. Tôi cần tạo bố cục riêng cho mỗi trang và gán văn bản từ bên trong bố cục, vì vậy khi lật trang, mỗi trang sẽ hiển thị bố cục với văn bản của nó.

3

Nếu bạn đang cố gắng truy cập tài nguyên chuỗi từ bên ngoài của một hoạt động, sau đó bạn cần phải vượt qua bối cảnh trong lớp đó (mà bạn nói bạn đã thực hiện), và sau đó gọi

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

Cũng kiểm tra tệp strings.xml của bạn để đảm bảo rằng bạn đang sử dụng id chuỗi chính xác. Nếu bạn đang sử dụng studio android, bạn có thể chỉ cần bắt đầu nhập R.string. và sau đó nó sẽ hiển thị các đề xuất từ ​​tệp strings.xml. Nếu bạn không thấy tài nguyên của mình ở đây, thì điều đó có thể cho biết có vấn đề với cách bạn đang lưu trữ tài nguyên của mình, trái ngược với cách bạn đang cố truy cập chúng.

0

Chỉ cần sử dụng hàm getContext(). GetString (resId) như getContext(). GetString (R.string.title1). Nó làm việc cho tôi.

Các vấn đề liên quan