2015-07-03 107 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

是否这样做,而复兴的片段也给了我同样的错误,我该怎么办? –

相关问题