5

SherlockFragment를 사용하여 중첩 된 조각을 사용하고 있습니다. 모두 정상적으로 작동합니다. 하지만 string.xml을 사용하여 다국어를 지원할 수 있도록 viewpager title을 string으로 만들 수 없습니다.viewpager를 구현하는 조각에서 getString()에 액세스

여기에 내 코드

public class schedule_pl extends SherlockFragment { 


private static String titles[] = new String[] { "Portugal", "Lisbon" , "Azores" }; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.main_pager, container, false); 
    // Locate the ViewPager in viewpager_main.xml 
    ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager); 
    // Set the ViewPagerAdapter into ViewPager 
    mViewPager.setAdapter(new MyAdapter (getChildFragmentManager())); 
    return view; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    try { 
     Field childFragmentManager = Fragment.class 
       .getDeclaredField("mChildFragmentManager"); 
     childFragmentManager.setAccessible(true); 
     childFragmentManager.set(this, null); 
    } catch (NoSuchFieldException e) { 
     throw new RuntimeException(e); 
    } catch (IllegalAccessException e) { 
     throw new RuntimeException(e); 
    } 
} 


public static class MyAdapter extends FragmentPagerAdapter { 

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


    @Override 
    public Fragment getItem(int position) { 
     switch(position) 
     { 
       case 0: 
        return new place(); 
       case 1: 
        return new place2();    
       case 2: 
        return new place3(); 

    } 
     return null; 
     } 




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

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 3; 
    } 
    } 


public static class place extends Fragment { 

    public place() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment1, container, 
       false); 
     return rootView; 
    } 
} 
public static class place3 extends Fragment { 

    public place3() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment2, container, 
       false); 
     return rootView; 
    } 
} 
public static class place2 extends Fragment { 

    public place2() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment3, container, 
       false); 
     return rootView; 
    } 
} 

} getPageTitle에

이미 문자열와 협력하는 여러 가지 방법을 시도 할 수 없다는 것입니다.

Access to getString() in android.support.v4.app.FragmentPagerAdapter? 이것은 사이트에서 비슷한 질문이지만 올바른 대답이없는 답변입니다.

@Override 
    public CharSequence getPageTitle(int position) { 
     Locale l = Locale.getDefault(); 
     switch (position) { 
     case 0: 
      return getcontext.getString(R.string.title_section_schedule1).toUpperCase(l); 
     case 1: 
      return getcontext.getString(R.string.title_section_schedule2).toUpperCase(l); 
     case 2: 
      return getcontext.getString(R.string.title_section_schedule3).toUpperCase(l); 
     } 
     return null; 
    } 

을하지만 작동하지 않습니다

나는이를 사용했습니다. 누구든지 이것에 대한 해결책을 알고 있습니까?

답변

3

어댑터 생성자에 Activity을 전달할 수 있습니다. MyAdapter에서 다음

mViewPager.setAdapter(new MyAdapter (getChildFragmentManager(), getActivity())); 

: 당신의 getPageTitle

... 
return myActivity.getString(R.String.title_section_scheduale1).toUpperCase(l); 
... 

에서 다음

//declare a private variable for the activity 
private Activity myActivity; 
public MyAdapter(FragmentManager fm, Activity myActivity) { 
    super(fm); 
    this.myActivity = myActivity; 
} 

은 그것을 밖으로 당신을 위해 일하는 희망을 봅니다.

+0

나를 위해 일했습니다! 고마워;) – Silvuz

+0

다행스럽게도 도와 줬어 :) – Coderji