Совершенно новый для кодирования для Android, но эта проблема заставляет меня рвать на себе волосы, потому что, кажется, не имеет никакого смысла вообще ...
У меня есть действие с четырьмя элементами формы в макете: CheckBox, два EditTexts и Button.
Когда пользователь нажимает кнопку, он сохраняет содержимое EditTexts в виде двух значений предпочтения.
Когда пользователь нажимает флажок, он делает следующее:Если флажок установлен, загрузите настройки и сохраните их в две переменные.Проверьте, содержат ли эти переменные пустые строки после обрезки.Если это так, покажите сообщение об ошибке, в противном случае отобразите сообщение об успехе.
По сути, два текстовых поля используются для установки пары предпочтений, которые не должны быть пустыми при установке флажка.
Кажется, работает нормально, если я нажимаю на флажок перед нажатием кнопки - сообщение об ошибке или сообщение об успехе отображаются соответствующим образом.
Если я нажимаю кнопку сохранения, а затем нажимаю флажок, оно всегда показывает сообщение об успехе, независимопредпочтений.
Код следует (обрезается из программы в целом) ...
layout.xml
<CheckBox android:id="@+id/cboxActive" android:text="Click me!" android:onClick="toggleActive" android:layout_width="wrap_content" android:layout_height="wrap_content" />
<EditText android:id="@+id/editFrom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone"><requestFocus /></EditText>
<EditText android:id="@+id/editTo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone"></EditText>
<Button android:id="@+id/btnSave" android:onClick="savePrefs" android:text="Save" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" />
</LinearLayout>
основной класс:
public class AutoMessengerActivity extends Activity
{
SharedPreferences settings;
CheckBox cboxActive;
EditText editFrom, editTo;
boolean active;
String from, to;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editFrom = (EditText) findViewById(R.id.editFrom);
editTo = (EditText) findViewById(R.id.editTo);
showPrefsInUI();
}
private void loadPrefs()
{
//Load preferences
settings = getPreferences(MODE_PRIVATE);
from = settings.getString("from", "");
to = settings.getString("to", "");
}
private void showPrefsInUI()
{
loadPrefs();
//Set UI elements to preference values
editFrom.setText(from);
editTo.setText(to);
}
public void savePrefs(View view)
{
SharedPreferences.Editor editor = settings.edit();
editor.putString("from", editFrom.getText().toString());
editor.putString("to", editTo.getText().toString());
editor.commit();
Toast.makeText(this, "Prefs saved!", Toast.LENGTH_SHORT).show();
}
public void toggleActive(View view)
{
if (cboxActive.isChecked())
{
loadPrefs();
//This toast is for debugging
//It shows the correct data in all circumstances...
Toast.makeText(this, "F: " + from + " T: " + to, Toast.LENGTH_SHORT).show();
//This is the part that seems to fail if you save then click checkbox
if (from.trim() == "" || to.trim() == "")
{
Toast.makeText(this, "Error - Prefs not saved", Toast.LENGTH_LONG).show();
cboxActive.setChecked(false);
}
else
{
Toast.makeText(this, "Success!", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(this, "Unchecked!", Toast.LENGTH_SHORT).show();
}
}
}
Надеемся, что этот код дает представление о проблеме и позволяет ее тиражировать ...