Я пытался использовать действие по настройке Android, у меня все настроено, но у меня возникли проблемы с получением пользовательских настроек.Если быть точным, это два параметра edittext, длина термина и длина года, которые я хочу получить в виде значений типа int, чтобы я мог использовать их в расчете в другой деятельности.
Каждый найденный мной пример отличается, и яне могу найти четкого объяснения.Я опубликую класс и метод, который я использую ниже, я знаю, что код там неправильный, но я чувствую, что я все время возился с ним и не могу понять.Эта строка, в частности, я не верю, является правильной: SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
и я не совсем понимаю предпочтительные действия в целом, они, кажется, не работают так, как я ожидал.Любой совет был бы действительно хорош!Я жонглировал одними и теми же строками кода уже несколько дней.
Спасибо.
Моя активность по настройкам выглядит следующим образом:
package com.geistware.studentbudgetapp;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.text.method.DigitsKeyListener;
import android.util.Log;
public class UserPrefs extends PreferenceActivity {
public int termLength = 1;
public int yearLength = 1;
@Override //OnCreate never runs, why?
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.setup);
EditTextPreference usersTermLength =(EditTextPreference)
findPreference(getString(R.string.term_length_set)); //finds
//the edittext box by its key, term_length_set
usersTermLength.getEditText().setKeyListener(DigitsKeyListener.
getInstance()); //DigitsKeyListener only allows digits to be typed in
Log.v("UserPrefs", "UsersTermLength: " + usersTermLength);
EditTextPreference usersYearLength =(EditTextPreference)
findPreference(getString(R.string.year_length_set));
usersYearLength.getEditText().setKeyListener(DigitsKeyListener.
getInstance());
}
}
, и я хочу иметь возможность получать пользователей termLength и yearLength (в виде целых чисел) в этом методе:
public float alterForFrequency(float enteredAmount, String spinnerPosition){
//get user preferences (not working)
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String termKey = getString(R.string.term_length_set, "");
String yearKey = getString(R.string.year_length_set, "");
int termLength = prefs.getInt(termKey, 1);
int yearLength = prefs.getInt(yearKey, 1);
Log.v("alterForFrequency", "userprefs: " + termLength + yearLength);
//perform calculations for monthly/temly/yearly
if(spinnerPosition.equals("Monthly")){
usersAmount = ((enteredAmount / 31)* 7);
Log.v("FiscFreq", "revisingAmount=" + usersAmount);
}
else if(spinnerPosition.equals("Termly")){
usersAmount = (enteredAmount / termLength);
Log.v("FiscFreq", "revisingAmount=" + usersAmount);
}
else if(spinnerPosition.equals("Yearly")){
usersAmount = (enteredAmount / yearLength);
}
else{
usersAmount = enteredAmount;
}
currencyRevisedAmount = toCurrency(usersAmount); //drops the unwanted digits
return currencyRevisedAmount;
}
Я на самом деле создаю экземпляр FiscalFrequency для использования alterForFrequency в действии под названием Keypad, например:
public class Keypad extends Activity { .....
public float reviseOnSpinnerPos(){
enteredAmount = Float.valueOf(userAmount.getText().toString());
FiscalFrequency ff = new FiscalFrequency();
revisedAmount = ff.alterForFrequency(enteredAmount, spinnerPosition);
return revisedAmount;
}
}