简体   繁体   English

从操作栏按钮启动错误的方法

[英]Error starting method from action bar button

I am trying to create a button on the action bar that will activate a method that is in the same activity. 我正在尝试在操作栏上创建一个按钮,该按钮将激活同一活动中的方法。

Below is my menu xml: 以下是我的菜单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>

Below are my relevant codes in the 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);
    }

I am trying to start "onRewrite()" when I click the "UNDO" button on my action bar. 单击动作栏上的“ UNDO”按钮时,我试图启动“ onRewrite()”。

However it shows the error below: 但是,它显示以下错误: 在此处输入图片说明

I tried using "android:onClick="onRewrite" on a normal button and it is able to start this method. Why is it not starting "onRewrite" in this case? 我尝试在常规按钮上使用“ android:onClick =“ onRewrite”,它能够启动此方法。为什么在这种情况下不启动“ onRewrite”?

why its show error? 为什么显示错误?

you have create method with parameter View like onRewrite(View v) and you are trying to call it without parameter that's why its show you that message. 您有带有参数视图(如onRewrite(View v) create方法,并且您尝试不带参数调用它,这就是它向您显示该消息的原因。

remove parameter from method. 从方法中删除参数。 like below 像下面

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

I tried using "android:onClick="onRewrite" on a normal button and it is able to start this method. 我尝试在普通按钮上使用“ android:onClick =“ onRewrite”,它能够启动此方法。

why its working? 为什么它起作用?


want to use method to work in both case. 想要在两种情况下都使用方法来工作。 create two method with same name & use same code inside that. 创建两个具有相同名称的方法,并在其中使用相同的代码。

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

another solution is create button click in activity and remove android:onClick="onRewrite from layout.xml, call onRewrite() from click event as well as from onOptionsItemSelected 另一个解决方案是在活动中创建按钮单击, android:onClick="onRewrite从layout.xml中删除android:onClick="onRewrite onRewrite,从click事件以及onOptionsItemSelected调用onRewrite()

Change your Activity code 更改您的活动代码

Error Because you calling method On onRewrite() without Parameter 错误,因为不带参数调用OnOnRewrite()方法

@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);
    }

Hope this will helps you 希望这对您有帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM