2017-04-06 4 views
0

그래서이 문제에 대한 여러 가지 해결책을 시도했습니다.문자열 리소스를 뷰 페이지 내의 문자열로 변환해야합니다.

다음
class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

SimpleFragmentPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

private String tabTitles[] = new String[] {"one","two","three","four"}; 

@Override 
public CharSequence getPageTitle(int position) { 
    return tabTitles[position]; 
} 

내가이 (가) string.xml에서 같은 문자열을 얻기 위해 다음과 같은 노력 :

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

SimpleFragmentPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

private String tabTitles[] = new String[] {Resources.getSystem().getString(R.string.one), 
    Resources.getSystem().getString(R.string.two), 
    Resources.getSystem().getString(R.string.three), 
    Resources.getSystem().getString(R.string.four)}; 

@Override 
public CharSequence getPageTitle(int position) { 
    return tabTitles[position]; 
} 

을하지만이 오류받은 : 치명적인 예외를 여기에 내가 시작했던 곳의 예입니다 : main 프로세스 : com.example.android.myapp, PID : 9923 java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com.example.android.myapp/com.example.android.myapp.MainActivity} : android.content .res.Resources $ NotFoundException : 문자열 res ource의 ID # 0x7f070017

내가 문자열이 존재하고 내가 그 문맥을해야 할 수도 있다고 생각 내 코드의 다른 영역에서 그들을 사용하는 것을 알고, 그래서 어댑터를 통해 MainActivity.this를 통과 시도 이후 :

치명적인 예외 :
class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

private Context mContext; 

SimpleFragmentPagerAdapter(FragmentManager fm, Context context) { 
    super(fm); 
    this.mContext = context; 
} 

private String tabTitles[] = new String[] {mContext.getResources().getString(R.string.one), 
    mContext.getResources().getString(R.string.two), 
    mContext.getResources().getString(R.string.three), 
    mContext.getResources().getString(R.string.four)}; 

@Override 
public CharSequence getPageTitle(int position) { 
    return tabTitles[position]; 
} 

그리고 이 오류를받은 주요 프로세스 : com.example.android.myapp를, PID : 5387 java.lang.RuntimeException가 : 활동 ComponentInfo를 시작할 수 없습니다 {com.example.android.myapp /com.example.android.myapp.MainActivity} : java.lang.NullPointerException : 시도 t o null 객체 참조에서 'android.content.res.Resources android.content.Context.getResources()'라는 가상 객체를 호출합니다.

마지막으로, 리소스를 MainActivity 내에서 문자열로 변환하여 전달하려고했습니다. 어댑터 :

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

private String mOne; 
private String mTwo; 
private String mThree; 
private String mFour; 

SimpleFragmentPagerAdapter(FragmentManager fm, one, two, three, four) { 
    super(fm); 
    mOne = one; 
    mTwo = two; 
    mThree = three; 
    mFour = four; 
} 

private String tabTitles[] = new String[] {mOne,mTwo,mThree,mFour};  

@Override 
public CharSequence getPageTitle(int position) { 
    return tabTitles[position]; 
} 

오류없이 실행되었지만 단순히 빈 탭 제목이 표시되었습니다.

어쩌면 나는 완벽한 멍청한 녀석 일 뿐이며 어쩌면 단순한 무언가를 잃어 버렸을지도 모르지만 당신이 제공 할 수있는 도움에 감사드립니다. 코드 줄에서

+0

어댑터를 인스턴스화하고 탭 레이아웃으로 설정할 위치를 표시 할 수 있습니까? – buradd

+0

내 대답이 도움이 되었습니까? 그렇다면 수용된 대답으로 표시하십시오. – MatusMak

답변

1

봐는 :

private String tabTitles[] = new String[] {mOne,mTwo,mThree,mFour}; 
private String tabTitles[] = new String[] { 
    mContext.getResources().getString(R.string.one), 
    mContext.getResources().getString(R.string.two), 
    mContext.getResources().getString(R.string.three), 
    mContext.getResources().getString(R.string.four) 
}; 

문제는, 이러한 배열은 mOne, mTwo, mThree 및 mFour의 빈 (실제로는, null) 값으로 초기화됩니다. 그 후에 만 ​​생성자에 값을 할당합니다. 그러나 이것은 배열을 업데이트하지 않습니다. 이 예를 살펴 보겠습니다 :

class SimpleFragmentPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private String tabTitles[]; 

    SimpleFragmentPagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.mContext = context; 
     tabTitles = new String[]{ 
      mContext.getResources().getString(R.string.one), 
      mContext.getResources().getString(R.string.two), 
      mContext.getResources().getString(R.string.three), 
      mContext.getResources().getString(R.string.four) 
     }; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabTitles[position]; 
    } 
} 

은 내가 여기 짓을했는지를 말하고있다 "이봐 자바, (이 null 값을 가지고) 초기화되지 tabTitles라는 문자열 배열이 있습니다." 그런 다음 생성자에서 "이봐, Java, 이러한 값을 tabTitles라는 배열에 할당하십시오." 이제 getPageTitle (int position)을 호출하면

+0

신난다, 고마워. 내가 너무 복잡해 졌다고 생각해. –