我有一个Unitconverter.java文件,它将Kelvin转换为Celsius,将Kelvin转换为Fahrenheit:
package com.sg.blabla;
import android.content.SharedPreferences;
import java.util.Locale;
public class UnitConvertor {
public static float convertTemperature(float temperature, SharedPreferences sp) {
if (sp.getString("unit", "C").equals("°C")) {
return UnitConvertor.kelvinToCelsius(temperature);
} else if (sp.getString("unit", "C").equals("°F")) {
return UnitConvertor.kelvinToFahrenheit(temperature);
} else {
return temperature;
}
}
public static float kelvinToCelsius(float kelvinTemp) {
return kelvinTemp - 273.15f;
}
public static float kelvinToFahrenheit(float kelvinTemp) {
return (((9 * kelvinToCelsius(kelvinTemp)) / 5) + 32);
}
}
我有一个MainActivity.java活动文件,当选中复选框时,它会根据用户输入转换tempature:
float temperature = UnitConverter.convertTemperature(Float.parseFloat(todayWeather.getTemperature()), sp);
if (sp.getBoolean("temperatureInteger", false)) {
temperature = Math.round(temperature);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_refresh) {
if (isNetworkAvailable()) {
getTodayWeather();
getLongTermWeather();
}
return true;
}
}
我有一个activity_main.xml文件,其中包含以下代码:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/settings_title_units">
<ListPreference
android:defaultValue="C"
android:entries="@array/temperatureUnits"
android:entryValues="@array/temperatureUnitsValues"
android:key="unit"
android:title="@string/setting_tempUnits" />
<CheckBoxPreference
android:defaultValue="false"
android:key="temperatureInteger"
android:title="@string/setting_showTempAsInteger" />
</PreferenceCategory>
</PreferenceScreen>
我有一个arrays.xml文件,其中包含以下代码:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="temperatureUnits">
<item name="C">@string/setting_unit_Celsuis</item>
<item name="F">@string/setting_unit_Fahrenheit</item>
<item name="K">@string/setting_unit_Kelvin</item>
</string-array>
<string-array name="temperatureUnitsValues">
<item name="C">°C</item>
<item name="F">°F</item>
<item name="K">K</item>
</string-array>
</resources>
我有一个menu.xml文件,其中包含以下代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activities.MainActivity">
<item
android:id="@+id/action_refresh"
android:icon="@drawable/ic_refresh_white_24dp"
android:title="@string/action_refresh"
app:showAsAction="always" />
</menu>
目前,在检查布局文件中的复选框后,我需要转到MainActivity页面然后如果单击Refresh,则MainActivity页面将反映我通过复选框检查的温度。
但我的问题是当在布局文件中选中复选框时,会自动刷新MainActivity页面。