当前位置: 首页 > 知识库问答 >
问题:

获取片段中的区域设置

东方华荣
2023-03-14

我所做的是创建了两个按钮,当按下一个按钮时,就会启动一个意图,片段中的区域设置也会改变。我通过获取所需的区域设置值来实现这一点,将其转换为字符串并将其放入额外的值中。它在活动之间工作得很好,但当我将其设置为片段时,它给了我一个错误

(java.lang.RuntimeException: Unable to start activity   
ComponentInfo{.phraseDetailActivity}: java.lang.NullPointerException: 
language=null,country=,variant= 

这是我的代码。

发送额外信息的活动:

 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");

我还尝试做了很多事情,比如将接收代码放在另一个地方,将其放在管理片段的活动中,但没有奏效。

注意:显示在我的代码上。

我认为问题出在这一行String change elee=getActive(). getIntent(). getStringExtra("KEY")我应该改变一些东西。

共有1个答案

柯振濂
2023-03-14

您是否尝试过重写onConfigurationChanged()以获取更新的区域设置?

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

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

更新:

听LocalBroadcastManager,一旦区域设置发生变化,通过Intent传递数据,

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);

在Fragment onCreateView方法中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("KEY");    
    return inflater.inflate(R.layout.fragment, container, false);
}
 类似资料:
  • 问题内容: 确实需要一些建议,不知道这里出了什么问题。 上下文:2个片段,每个片段都有一个Textview,主要活动有2个按钮和一个edittext 目的:在主活动的edittext框中键入hello,然后单击片段1的按钮,textview将变为hello。 问题: 在edittext中输入hello并单击按钮1时,会遇到运行时错误。 Logcat: fragment_one.xml activi

  • 我想在收到一些HTTP请求的响应后,更新几个<code>片段 。-- 活动 适配器 碎片样本 日志显示位置0,1处的片段的<code>updateData</code>工作良好。但是对于位置2处的片段,它会导致错误。 我发现的区别是适配器没有为位置2调用,这意味着没有调用的。因此不存在。 我的直觉告诉我,问题一定来自适配器的工作流或fragmentManager事务。但是作为一个Android初学

  • 问题内容: 我想获取印度的货币格式,所以我需要一个印度对象。但是只有几个国家的常数(a )为常数,而印度不是其中一个。 要获取美国和英国的货币符号,我可以执行以下操作: 使用常量和。如果我想获取印度货币格式,该怎么办? 问题答案: 根据JDK发行说明,您具有区域代码(印地语)和(英语)。

  • 我正在实现一个片段,该片段调用两个。