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

时间:2016-02-12 03:59:25

标签: java android android-actionbar menuitem

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

下面是我的菜单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>

以下是我在活动中的相关代码:

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

我正在尝试开始&#34; onRewrite()&#34;当我点击&#34; UNDO&#34;我的操作栏上的按钮。

但是它显示以下错误: enter image description here

我尝试使用&#34; android:onClick =&#34; onRewrite&#34;在普通按钮上,它可以启动此方法。为什么不开始&#34; onRewrite&#34;在这种情况下?

2 个答案:

答案 0 :(得分:2)

为什么显示错误?

你有创建方法参数View onRewrite(View v),你试图在没有参数的情况下调用它,这就是为什么它会显示你的消息。

从方法中删除参数。如下所示

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

我尝试使用&#34; android:onClick =&#34; onRewrite&#34;在一个普通的按钮和它   能够启动这种方法。

why its working?

想要在两种情况下都使用方法。创建两个同名的方法&amp;在其中使用相同的代码。

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

另一个解决方案是在活动中创建按钮点击并从layout.xml中删除android:onClick="onRewrite,从点击事件以及onRewrite()

中调用onOptionsItemSelected

答案 1 :(得分:2)

更改您的活动代码

错误因为您在没有参数

的情况下调用on on onwrite()方法
requestAlwaysAuthorization

希望这会对你有所帮助