从操作栏按钮启动方法时出错
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.
想在这两种情况下都使用方法。创建两个具有相同名称的方法并在其中使用相同的代码。
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);
}
希望对您有所帮助
我正在尝试在操作栏上创建一个按钮,该按钮将激活同一 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.
想在这两种情况下都使用方法。创建两个具有相同名称的方法并在其中使用相同的代码。
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);
}
希望对您有所帮助