2015-12-11 59 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