创建2个纺丝器。区域的父旋转器,时区的子旋转器。我在获取选定区域的时区时遇到了困难。这是我用来获取区域的代码。
Locale[] locale = Locale.getAvailableLocales();
regions = new ArrayList<String>();
for (Locale loc : locale) {
region = loc.getDisplayCountry();
Log.e("Country",""+region);
if (region.length() > 0 && !regions.contains(region)) {
regions.add(region);
}
}
Log.d(TAG, "onActivityCreated: " + regions);
Collections.sort(regions, String.CASE_INSENSITIVE_ORDER);这是我的旋转器的适配器
ArrayAdapter<String> regionAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.spinner_item, regions);
regionAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mRegion.setAdapter(regionAdapter);比我这里的onSelectedItem还多
mRegion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
timeZones = android.icu.util.TimeZone.getAvailableIDs();
//Time Zone Adapter
ArrayAdapter<String> timeZoneAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.spinner_item, timeZones);
timeZoneAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mTimeZone.setAdapter(timeZoneAdapter);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});有了这个设置,我可以让下拉旋转器工作,但他们只是显示所有的区域和所有的时区可用。
发布于 2022-09-07 15:50:44
我想我已经解决了我的问题。
@RequiresApi(api = Build.VERSION_CODES.N)
public void getTimeZoneByCountryCode(){
//Retrieves the selected Region
String _region = mRegion.getSelectedItem().toString();
//Uses selected region for time zone!
timeZone = TimeZone.getAvailableIDs(getCountryCodeFromName(_region));
//Time Zone Adapter
ArrayAdapter<String> timeZoneAdapter = new ArrayAdapter<String>(getActivity(),
R.layout.spinner_item, timeZone);
timeZoneAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mTimeZone.setAdapter(timeZoneAdapter);
}
@RequiresApi(api = Build.VERSION_CODES.N)
public void getCountryName(){
Locale[] locale = Locale.getAvailableLocales();
regions = new ArrayList<String>();
for (Locale loc : locale) {
region = loc.getDisplayCountry();
Log.e("Country",""+region);
if (region.length() > 0 && !regions.contains(region)) {
regions.add(region);
}
}
Log.d(TAG, "onActivityCreated: " + regions);
Collections.sort(regions, String.CASE_INSENSITIVE_ORDER);
}
@RequiresApi(api = Build.VERSION_CODES.N)
public static String getCountryCodeFromName(String country) {
return Arrays.asList(Locale.getISOCountries())
.stream()
.map((s) -> new Locale("", s))
.filter((l) -> l.getDisplayCountry().toLowerCase().equals(country.toLowerCase()))
.findFirst()
.map((l) -> l.getCountry().toLowerCase())
.orElse("UNKNOWN");
}下面是我用来编写国家名称、将国家名称转换为国家代码以及从选定国家获取时区的代码。
https://stackoverflow.com/questions/73593822
复制相似问题