2015-12-11 58 views
5

在我的Android应用程序中,我想更改语言表单fragment.My应用程序包含MainActivity.java。此活动包含导航抽屉和片段。当我从片段改变我的语言环境,语言会改变每一个地方,但不是在导航drawer.I正在使用的代码更改navigationdrawer项目语言

private String setLocal() { 
    Locale locale; 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    prefs = getActivity().getSharedPreferences("Language", 0); 
    String restoredText = prefs.getString("language", ""); 
    if (restoredText.equalsIgnoreCase("fr_FR")) 
     locale = new Locale("fr"); 

    else 
     locale = new Locale("en"); 
    Locale.setDefault(locale); 
    conf = new Configuration(); 
    res.updateConfiguration(conf, dm); 

    return restoredText; 
} 

当我选择我的英语得到改变语言后,下面的结果in English

我得到这样的一个

enter image description here 这里距离值-FR目录字符串的文件

<string-array name="nav_drawer_titles"> 
    <item>Accueil</item> 
    <item>Profil</item> 
    <item>courses</item> 
    <item>Tarification</item> 
    <item>Configuration</item> 
    <item>Envoyez à un ami</item> 
    <item>Facture</item> 
    <item>Position du Chaufeur</item> 
    <item>Aide</item> 
    <item>Déconnexion</item> 
</string-array> 

在这里从值文件夹

<!-- Nav Drawer Menu Items --> 
<string-array name="nav_drawer_titles"> 
    <item>Home</item> 
    <item>Profile</item> 
    <item>Ride Log</item> 
    <item>Invoice</item> 
    <item>Track Chauffeur</item> 
    <item>Language</item> 
    <item>Refer To Friend</item> 
    <item>Help</item> 
    <item>Sign Out</item> 
</string-array> 

和我navigationdrawerfragnet是

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    title = getResources().getStringArray(R.array.nav_drawer_titles); 

    images = getResources().getStringArray(R.array.nav_drawer_icons); 


    mDrawerListView = (ListView) inflater.inflate(
      R.layout.fragment_navigation_drawer, container, false); 


    mDrawerListView 
      .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        selectItem(position); 
       } 
      }); 
    selectedposition = new int[] { mCurrentSelectedPosition }; 
    drawerAdapter = new CustomDrawerAdapter(getActivity(), title, images, 
      selectedposition); 

    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
    mDrawerListView.setAdapter(drawerAdapter); 
    return mDrawerListView; 
} 

林MainActivity.java

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // TODO Auto-generated method stub 
    super.onPrepareOptionsMenu(menu); 
    invalidateOptionsMenu(); 
    setLocal(); 
    return super.onPrepareOptionsMenu(menu); 
} 
@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 
    setLocal(); 
    invalidateOptionsMenu(); 
} 
+0

你应该改变你的活动,其中包含菜单抽屉。 – Piyush

+0

好吧我改变它的主要活动,但没有得到desirede结果 –

+0

我认为你的menudrawer项目的字符串也应该在strings.xml中,它们在它吗? – Bhushan

回答

0

检查this

title = getResources().getStringArray(R.array.nav_drawer_titles); 

images = getResources().getStringArray(R.array.nav_drawer_icons); 

    mDrawerListView 
     .setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       selectItem(position); 
      } 
     }); 
selectedposition = new int[] { mCurrentSelectedPosition }; 
drawerAdapter = new CustomDrawerAdapter(getActivity(), title, images, 
     selectedposition); 

mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
mDrawerListView.setAdapter(drawerAdapter); 

你需要按ŧ在这里您SETLOCAL法系无效抽屉名单

+0

更加清楚,请....... –

+0

你需要取消你drawerAdapter更新字符串数组。只复制有线上方,以你的SETLOCAL方法 –

+0

在导航抽屉片段 –

4

你应该setContentView(int resId)之前设置您的语言环境在你的抽屉活动。

此外,在onResume()方法,你可以用API_LEVEL >= 11 通话super.recreate() recrate您的活动及以下11你可以设置onCreate(null)

+0

在主要活动中或在导航抽屉片段我使用API​​级11 –

+0

主要活动... – Piyush

+0

@RahulPatel没有ü检查? – Piyush