У меня есть 2 текста для редактирования, и оба они связаны с соответствующими кнопками изображений. Когда я нажимаю кнопки и использую ввод текста редактирования, он работает только после второго нажатия. По сути, у меня есть большое значение, и любое число, которое я вставляю в текст редактирования, вычитается из большого значения после нажатия кнопки.
У меня есть еще одна кнопка в том же действии, которая переводит вас в действие настроек, но это одна работает отлично, я не знаю, почему эти 2 кнопки требуют двойного нажатия.
XML Код:
<ImageButton
android:id="@+id/plusCal"
android:layout_width="38dp"
android:layout_height="32dp"
android:layout_marginStart="120dp"
android:layout_marginBottom="124dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/plus" />
Код активности:
publi c класс MainActivity расширяет AppCompatActivity {
//create private ImageButton Object
private ImageButton setting_button;
TextView Cremaining, Premaining;
EditText MinusCal, MinusPro;
ImageButton plusCal, plusPro;
String calData, proData;
SharedPreferences prefs;
int calint, proint, Calinput, ProInput;
String Result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
calData = prefs.getString("Cal_Total","0");
proData = prefs.getString("Pro_Total","0");
//retrieve TxtView using findviewbyID
Cremaining = (TextView) findViewById(R.id.RemainingCal);
Premaining = (TextView) findViewById(R.id.RemainingPro);
//Retrieve EditButton using findviewbyID
MinusCal = (EditText)findViewById(R.id.EditCal) ;
MinusPro = (EditText)findViewById(R.id.EditPro);
//Retrieve Button using findViewbyID
plusCal = (ImageButton)findViewById(R.id.plusCal);
plusPro = (ImageButton)findViewById(R.id.plusProtein);
//Set Protein and Calories either from settings or update from result
Cremaining.setText(calData);
Premaining.setText(proData);
plusCal.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = prefs.edit();
//Subtract Calories from Input calories, then set total to calData and save and set text
Calinput = Integer.parseInt(MinusCal.getText().toString());
calint = Integer.parseInt(calData);
calint -= Calinput;
calData = String.valueOf(calint);
editor.putString("Cal_Total", calData);
calData = prefs.getString("Cal_Total","0");
Cremaining.setText(calData);
editor.apply();
}
});
Игнорируя форматирование и избыточные переменные, я хочу очистить код, как только у меня возникнет проблема, то же самое с любая обработка ошибок (попытка ловит)
ОБНОВЛЕНИЕ: Я понял это: редактор, я использую .apply () вместо коммита, и я использую его поздно в вызове выполнения, поэтому я установил значение сохраните его в общих настройках, а затем вызовите общие настройки без фиксации в правильном потоке, в результате чего он тоже получит старое значение.