gpt4 book ai didi

java - 获取 fragment 中的区域设置

转载 作者:行者123 更新时间:2023-12-01 11:21:12 25 4
gpt4 key购买 nike

所以我所做的是创建了两个按钮,当按下一个按钮时,一个 Intent 启动并且 fragment 中的区域设置发生变化。我通过获取我想要的区域设置值,将其转换为字符串并将其放入 extra 中来做到这一点。它在 Activity 之间工作得很好,但是当我将它设置为 fragment 时,它给了我一个错误

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

这是我的代码。

发送额外内容的 Activity :

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

接收区域设置的 fragment :

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

我还尝试做很多事情,例如将接收代码放入另一个位置,将其放入管理 fragment 的 Activity 中,但没有成功。

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

我认为问题出在这一行字符串上 changelee = getActivity().getIntent().getStringExtra("KEY")我应该改变一些事情。

最佳答案

您是否尝试过重写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:

从 Activity 中,您发送数据的 Intent 如下:

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

关于java - 获取 fragment 中的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com