finish()方法在Android中的OptionsItemSelected方法内部不起作用

时间:2019-04-18 09:16:34

标签: android android-activity

当用户在EditText字段中未插入任何内容并单击ID为item_1的菜单项时,我试图调用finish()方法关闭Activity。但是,每当我尝试执行此操作时,活动都不会关闭,程序会转到下一行(并最终以异常结束)。我知道我可以以不同的方式处理此异常(也可以通过先检查空字符串然后使用Integer.parseInt来避免该异常,从而避免该异常),但是我想知道为什么finish()方法无法正常工作并且程序转到下一行。我读过类似的问题,但是this没有回答我的问题。我还确认了该程序通过添加口头日志来进入下一行。我也尝试过使用ActivityClassName.this.finish(),但仍然无法正常工作。代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.item_1:
            //When Option 1 is selected
            Log.v("MainActivity", "Test: Before insertWeight is called");
            insertWeight();
            Log.v("MainActivity", "Test: After insertWeight is called");
            return true;

        case R.id.item_2:
            //When Option 2 is selected
            return true;
    }
    return super.onOptionsItemSelected(item);
}
private void insertWeight(){
    String weightString = weightField.getText().toString().trim();
    if(weightString.isEmpty()){
        Log.v("MainActivity", "Test: Weight is EMPTY!!!");
        finish();
    }
    int i = Integer.parseInt(weightString);
    Log.v("MainActivity", "Test: Weight is- " + i);
}

@Override
protected void onDestroy() {
    Log.v("MainActivity", "Test: Inside the onDestroy method");
    super.onDestroy();
}

3 个答案:

答案 0 :(得分:0)

js.Dynamic

在这里,您需要检查string是否不为空且不为null,然后您将打印Weight,否则会发生NumberFormatException。

答案 1 :(得分:0)

我希望这对您有用

写以下方法

/var/lib/jenkins/config.xml

调用以下给出的方法

public boolean Validates() {
        if (weightField.getText().toString().equalsIgnoreCase("")) {
            finish();
            return false;
        } else {
            return true;
        }
    }

答案 2 :(得分:0)

MikeM。和Joachim Haglund的综合评论回答了我的问题-

“ finish()不会立即停止Activity中的代码执行。它会异步发生。”-MikeM。

“在finish()之后添加“ return;”,也许应用程序在完成finish调用之前就遇到了异常,因此通过调用return可以使条件继续下去。” – Joachim Haglund

(注意:我不知道在StackOverflow中将组合注释标记为答案的任何方法,所以我是手动进行的)