2015-07-03 105 views
0

所以我所做的是我創建了兩個按鈕,當按下某個按鈕時,意圖啓動並且片段中的語言環境發生更改。我通過獲取所需的語言環境值來實現這一點,將其轉換爲字符串並將其放入額外的位置。它的工作activites之間完全正常,但是當我將它設置爲一個片段,它給了我一個錯誤在片段中獲取語言環境

這裏是我的代碼。

活動發送額外的:

bt2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Locale locale = new Locale("ar"); 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 


      String changela = locale.getLanguage(); 
      Intent i = new Intent(Countrylist.this,PhraseDetailActivty.class); 
      i.putExtra("KEY",changela); 
      startActivity(i); 
     } 
    }); 

片接收區域設置:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    if (getArguments().containsKey(ARG_ITEM_ID)) { 
     // Load the dummy content specified by the fragment 
     // arguments. In a real-world scenario, use a Loader 
     // to load content from a content provider. 
     mItem = DummyContent.ITEM_MAP.get(getArguments().getString(ARG_ITEM_ID)); 
    } 

    //error at the line under this comment 
    String changelee = getActivity().getIntent().getStringExtra("KEY"); 
    Locale locale = new Locale(changelee); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getActivity().getResources().updateConfiguration(config, 
      getActivity().getResources().getDisplayMetrics()); 

它讓我在這條線的錯誤。

String changelee = getActivity().getIntent().getStringExtra("KEY"); 

我也嘗試做很多東西一樣把reciving代碼放到另一個地方,把它在管理活動中的片段,但沒有工作。

注意:顯示在我的代碼上。我想這個問題是在這一行字符串 changelee = getActivity()。getIntent()。getStringExtra(「KEY」) 我應該改變一些事情。

回答

1

您是否嘗試覆蓋onConfigurationChanged()以獲取更新的區域設置?

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    final Locale locale = newConfig.locale; 
    ... 
} 

UPDATE:

聽一個LocalBroadcastManager,一旦現場發生了變化傳遞通過意向數據,

private BroadcastReceiver myReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String changela = getResources().getConfiguration().locale.getLanguage() 
     Intent i = new Intent(Countrylist.this,PhraseDetailActivty.class); 
     i.putExtra("KEY",changela); 
     startActivity(i); 
    } 
}; 

bt2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Locale locale = new Locale("ar"); 
      Locale.setDefault(locale); 
      Configuration config = new Configuration(); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, 
        getBaseContext().getResources().getDisplayMetrics()); 


      IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED); 
      registerReceiver(myReceiver, filter); 
     } 
    }); 

更新2:

從活動你故意發送數據如:

Bundle bundle = new Bundle(); 
bundle.putString("KEY", changela); 
// set YourFragmentclass Arguments 
YourFragmentclass fragobj = new YourFragmentclass(); 
fragobj.setArguments(bundle); 

和片段onCreateView方法:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    String strtext = getArguments().getString("KEY");  
    return inflater.inflate(R.layout.fragment, container, false); 
} 
+0

試了一下,沒有工作 –

+1

請檢查更新的答案。如果您仍然遇到問題,請嘗試從您的片段中打印「changelee」,以確保傳遞的數據不爲空。 –

+0

是否這樣做,而復興的片段也給了我同樣的錯誤,我該怎麼辦? –

相關問題