Intereting Posts
Как масштабировать потоковое растровое изображение на месте, не читая сначала все изображение? Как мигать изображение в ImageView (Android) GZip в android Отвязывание drawables onPause (), вызывающее невосприимчивую обратную навигацию и пропуская этот шаг, вызывает переполнение памяти FindViewById () возвращает null, когда я вызываю его в onCreate () Android-словарь для Android – проверка орфографии – Android Studio Ошибка выполнения теста: невозможно найти информацию о контроле для: ComponentInfo {} – ошибка, пытающаяся протестировать в IntelliJ с Gradle Проблема выравнивания с gridlayout Сепаратор между кнопками в пользовательской панели кнопок Поддержка Bluetooth Smart (4.0) / GATT в Android 4.0? Можно ли отключить доступ к макету (представлениям) фрагмента из родительской активности? Ароматы подписи под ключ с разными клавишами на Android Полноэкранное приложение, макет сдвинут вниз по высоте панели уведомлений Получить расстояние между текущим местоположением и выбранным местом в андроиде Android: Как наложить-a-bitmap / нарисовать растровое изображение?

Как получить настройки для работы в Android?

Я действительно боролся с этим. Новое для Java / Android. Я пишу свое первое приложение, и это первое, что заняло у меня больше времени, чем пару дней поиска. Вот настройка: это счетчик / счетчик BAC:

Alt text

Формула используется для расчета BAC. Вот форум:

Bac = ((StandardDrinks / 2) * (GenderConstant / Weight)) - (0.017 * Hours); 

Итак, вы можете видеть, что возможность изменения пола и веса даст более точные и персонализированные результаты. Поэтому у меня их как двойники:

 double GenderConstant = 7.5; //9 for female double Weight = 180; 

Чтобы изменить эти переменные, я хотел бы, чтобы человек мог войти в настройки и выбрать разные значения. У меня есть эти вещи, но они не связаны с указанными выше переменными, потому что я не могу для жизни понять, как это сделать. Вот они:

Alt text

Я нажимаю кнопку меню, и это всплывает. Отлично. Я нажму Настройки.

Alt text

Теперь настройки появляются. Вот мои preferences.xml:

 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="Personal Settings"> <ListPreference android:title="Gender" android:summary="Verify or deny the presence of a Y chromosome." android:key="genderPref" android:defaultValue="male" android:entries="@array/genderArray" android:entryValues="@array/genderValues" /> <ListPreference android:title="Weight" android:summary="How much the planet pulls on you, in pounds." android:key="weightPref" android:defaultValue="180" android:entries="@array/weightArray" android:entryValues="@array/weightValues" /> </PreferenceCategory> <PreferenceCategory android:title="Drink Settings"> <ListPreference android:title="Beer Size" android:summary="The volume of your beer, in ounces." android:key="beerPref" android:defaultValue="12" android:entries="@array/beerArray" android:entryValues="@array/beerValues" /> <ListPreference android:title="Shot Size" android:summary="The volume of your shot, in ounces." android:key="shotPref" android:defaultValue="1.5" android:entries="@array/shotArray" android:entryValues="@array/shotValues" /> <ListPreference android:title="Wine Size" android:summary="The volume of your wine, in ounces." android:key="winePref" android:defaultValue="5" android:entries="@array/wineArray" android:entryValues="@array/wineValues" /> </PreferenceCategory> </PreferenceScreen> 

Вперед к весу ListPreference:

Alt text

И это проявляется. Значения хранятся в виде массивов строк в res / values ​​/ arrays.xml. Вот пример, только весовых:

 <string-array name="weightArray"> <item>120 lbs</item> <item>150 lbs</item> <item>180 lbs</item> <item>210 lbs</item> <item>240 lbs</item> <item>270 lbs</item> </string-array> <string-array name="weightValues"> <item>120</item> <item>150</item> <item>180</item> <item>210</item> <item>240</item> <item>270</item> </string-array> 

Это в основном, насколько я понял. Я могу щелкнуть значение, конечно, но оно не меняет формулу, потому что оно не связано с двойниками, которые я создал в DrinkingBuddy.java. Все данные, отображаемые в настройках, теперь представляют собой только пустые оболочки, в том числе прядильщик на основном макете (время по умолчанию только установлено на 1 час)

Я создал Preferences.java и попытался реализовать различные комбинации кода, найденные в учебниках и ресурсах по всему Интернету, но безрезультатно. Здесь все равно, заполненный неудачными попытками сделать beerPref (параметр настроек, чтобы изменить количество унций в пиве), коррелирует с переменной в моем основном классе:

 package com.dantoth.drinkingbuddy; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.Preference.OnPreferenceClickListener; public class Preferences extends PreferenceActivity { public static final String PREF_BEER_SIZE = "PREF_BEER_SIZE"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); //Get the custom preference Preference beerPref = (Preference) findPreference("beerPref"); beerPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { SharedPreferences customSharedPreference = getSharedPreferences("myCustomSharedPrefs", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = customSharedPreference.edit(); editor.commit(); return true; }} );} } 

Полный учебник и образец кода будут УДИВИТЕЛЬНЫ, так как я еще не найду никаких надежных руководств.

Solutions Collecting From Web of "Как получить настройки для работы в Android?"

Я все еще работаю над этим сам, но (несколько адаптированный из моей версии), я думаю, что ваш класс предпочтений должен выполнять только следующее:

 public class Preferences extends PreferenceActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // load the XML preferences file addPreferencesFromResource(R.xml.preferences); } } 

Затем в вашем основном классе вы можете обратиться к настройкам:

 public class DrinkingBuddy extends Activity implements OnSharedPreferenceChangeListener { private int weight; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); // register preference change listener prefs.registerOnSharedPreferenceChangeListener(this); // and set remembered preferences weight = Integer.parseInt((prefs.getString("weightPref", "120"))); // etc } // handle updates to preferences public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if (key.equals("weightValues")) { weight = Integer.parseInt((prefs.getString("weightPref", "120"))); } // etc } } 

Сохранение обновлений предпочтений обрабатывается для вас.

(Не слишком уверен в публичных / частных декларациях!)

Вы запрашиваете, вероятно, два разных набора файлов предпочтений.

Убедитесь, что вы сохранили значения ListPreference в тех же файлах. Запустите adb roll в cd /data/data/com.your.package и найдите папки и файлы с настройками типа.

Я думаю, что ошибка заключается в том, что вы указываете другой файл, кроме того, который был сохранен:

Попробуйте изменить это:

 SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

в

 SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(context); 

Тогда вам, вероятно, придется запрашивать только

 preferences.getString('weightPref', null); 

Также вам не нужен редактор . Настройки сохраняются автоматически.

Для большинства приложений наиболее удобно использовать стандартные настройки по умолчанию. Вы можете получить из любого места, где вы их используете:

 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); 

Вы можете сохранить в нем новые переменные с помощью:

 sp.edit().putString("var_name", "var value".apply();