从操作栏按钮启动方法时出错

Error starting method from action bar button

我正在尝试在操作栏上创建一个按钮,该按钮将激活同一 activity 中的一个方法。

下面是我的菜单xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".AddContactActivityOCR">

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />

    <item
        android:id="@+id/undo"
        android:orderInCategory="100"
        android:title="UNDO"
        app:showAsAction="always"/>

</menu>

下面是我在activity中的相关代码:

@Override
    public boolean onCreateOptionsMenu (Menu menu) {

        getMenuInflater().inflate(R.menu.menu_add_contact_undo, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.undo:
                onRewrite();
                return true;

            case android.R.id.home:
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);

        }
    }

 public void onRewrite(View v){
        listName.setText(recognizedText);
        listOwner.setText(recognizedText);
        companyName.setText(recognizedText);
        companyAddress.setText(recognizedText);
        companyNumber.setText(recognizedText);

        mCurrentLang = mFromLang;

        validator(recognizedText);
    }

我尝试在单击操作栏上的 "UNDO" 按钮时启动 "onRewrite()"。

但是它显示以下错误:

我尝试在普通按钮上使用 "android:onClick="onRewrite",它能够启动此方法。为什么在这种情况下它没有启动 "onRewrite"?

为什么显示错误?

您创建了带参数 View 的方法,例如 onRewrite(View v),而您正试图在不带参数的情况下调用它,这就是它向您显示该消息的原因。

从方法中删除参数。如下图

public void onRewrite(){ .... // your code}

I tried using "android:onClick="onRewrite" on a normal button and it is able to start this method.

why its working?


想在这两种情况下都使用方法。创建两个具有相同名称的方法并在其中使用相同的代码。

public void onRewrite(){ .... // your code}
public void onRewrite(View v){ .... // your code}

另一个解决方案是在 activity 中创建按钮单击并从 layout.xml 中删除 android:onClick="onRewrite,从单击事件和 onOptionsItemSelected[ 中调用 onRewrite()

更改您的 Activity 代码

错误,因为你在没有参数的情况下调用 onRewrite() 方法

@Override
    public boolean onCreateOptionsMenu (Menu menu) {

        getMenuInflater().inflate(R.menu.menu_add_contact_undo, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.undo:

                onRewrite();

                return true;

            case android.R.id.home:
                finish();

                return true;
            default:
                return super.onOptionsItemSelected(item);

        }
    }

 public void onRewrite(){
        listName.setText(recognizedText);

        listOwner.setText(recognizedText);

        companyName.setText(recognizedText);

        companyAddress.setText(recognizedText);

        companyNumber.setText(recognizedText);

        mCurrentLang = mFromLang;

        validator(recognizedText);
    }

希望对您有所帮助