必须在Android Studio中单击两次按钮才能工作(与其他人的问题不同)

问题描述 投票:1回答:1

我有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();

        }
                                   });

忽略格式和冗余变量,一旦出现问题,我的目标是清理代码,所有错误处理(尝试捕获)也一样

java android xml android-studio button
1个回答
0
投票

当您编辑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
}
© www.soinside.com 2019 - 2024. All rights reserved.