我有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" />
活动代码:
公共类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();
}
});
忽略格式和冗余变量,一旦出现问题,我的目标是清理代码,所有错误处理(尝试捕获)也一样
当您编辑editText时,该视图具有焦点。因此,第一次点击将使其失去焦点(编辑插入符号将消失),而第二次点击可转到按钮或任何其他视图。
您可以editText.setOnFocusChangeListener
,然后如果您选择focus == false
,则可以运行所需的操作。
或者您可以执行editText.addTextChangedListener()
并覆盖所需的方法。您可以在那里触发所需的操作,并且当用户输入值时,您可以自动进行计算。在这种情况下,不需要按钮。
或者您可以editText.setOnKeyListener()
并覆盖onKey()
并检测何时敲击Enter键,请执行以下操作:
if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
//perform the action you want
}