首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中必须单击两次按钮才能工作(与其他人的问题不同)

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

Stack Overflow用户
提问于 2020-04-06 03:19:52
回答 1查看 232关注 0票数 1

我有两个编辑文本,它们都链接到各自的图像按钮。当我单击按钮并使用来自编辑文本的输入时,它只工作一次,我第二次按它。基本上,我有一个很大的值,我在编辑文本中输入的任何数字一旦按下按钮,就会从大值中减去。

我有另一个按钮在相同的活动,带您到设置活动,但其中一个非常好的工作,我不知道为什么这两个按钮需要双击。

XML代码:

代码语言:javascript
复制
  <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 {

代码语言:javascript
复制
//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();

        }
                                   });

忽略格式化和冗余变量,我的目标是清理代码一旦我有问题的工作,同样适用于任何错误处理(尝试捕获)

UPDATE:我猜到了:编辑器,我使用的是.apply()而不是commit,我在执行调用时使用它很晚,所以我设置了值,将它保存为共享首选项,然后在没有正确流的情况下回忆共享的首选项,这导致它也恢复了原来的值。

EN

回答 1

Stack Overflow用户

发布于 2020-04-06 04:04:24

编辑editText时,该视图具有焦点。因此,第一个点击将使它失去焦点(编辑插入符号将消失),第二个点击可以转到按钮或任何其他视图。

您可以执行editText.setOnFocusChangeListener,然后如果focus == false可以运行您想要的操作。

或者您可以执行editText.addTextChangedListener()并重写所需的方法。您可以在其中触发您想要的操作,并且当用户输入一个值时,您可以自动进行计算。在这种情况下不需要按钮。

或者,您可以使用editText.setOnKeyListener()和重写onKey(),并检测回车键何时被点击,执行如下操作:

代码语言:javascript
复制
if ((keyevent.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
 //perform the action you want
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61052476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档