Java代码: -
package com.example.plannerv1;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.w3c.dom.Text;
import java.util.ArrayList;
public class DisplayNotes extends AppCompatActivity {
handledatabaseonhomescreen handle_db_notes = new handledatabaseonhomescreen();
private int key;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_display_notes);
Intent incomingintent = getIntent();
key = incomingintent.getIntExtra("key",-1);
displaydate(key);genanddisplay();
}
protected void addanote(View v)
{
Intent goback = new Intent();
goback.putExtra("returnkey",-100);
goback.putExtra("datewas",key);
setResult(RESULT_OK,goback);
finish();
}
protected void onActivityResult(int requestCode,int resultCode,Intent intent)
{
genanddisplay();
}
}
XML code:-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_width="match_parent"
android:gravity="top|center"
android:layout_height="match_parent"
tools:context=".DisplayNotes"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="20sp"
android:paddingBottom="20sp"
android:textStyle="bold"
android:gravity="center"
android:textSize="20dp"
android:id="@+id/dmy"/>
<ListView
android:layout_width="match_parent"
android:layout_height="0px"
android:paddingTop="20sp"
android:paddingBottom="20sp"
android:paddingLeft="5sp"
android:paddingRight="6sp"
android:layout_weight="10"
android:id="@+id/displaynote">
</ListView>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20sp"
android:text="Add Note"
android:onClick="addanote"/>
</LinearLayout>
错误:-
java.lang.IllegalStateException: Could not find method addanote(View) in a parent or ancestor Context for android:onClick attribute defined on view class androidx.appcompat.widget.AppCompatButton
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:424)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:381)
at android.view.View.performClick(View.java:5619)
at android.view.View$PerformClick.run(View.java:22298)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:165)
at android.app.ActivityThread.main(ActivityThread.java:6375)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
我无法弄清楚为什么onClick标记没有将按钮附加到指定的函数。
我试图谷歌这个问题,但没有什么可以帮助我。我尝试更改名称并检查文件是否已链接但没有任何帮助。
我很抱歉错误的格式,但stackoverflow不会让我发布。
Android Studio提供此警告: -
Method 'addanote' in 'DisplayNotes' has incorrect signature less... (Ctrl+F1)
Inspection info: Checks if the method specified in onClick XML attribute is declared in related activity
你addanote()
功能必须是public
,而不是protected
:
public void addanote(View v)
文件:https://developer.android.com/guide/topics/ui/controls/button#java
正如@Marcin所提到的,你应该使用public
而不是protected
。此外,您可以使用不同但更好的方法,在Button
上添加一个监听器:
将一个id
属性添加到Button,然后在onCreate()
方法中定义侦听器。
XML:
<Button
android:id="addNote"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20sp"
android:text="Add Note"/>
那么Java:
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Button addNote = findViewById(R.id.addNote);
addNote.setOnClickListner(new View.OnClickListener() {
@Override
public void onClick() {
//Your code to be implemented when button is clicked.
}
});
...
}
'MainActivity'活动有一个具有相同名称和参数的函数,并将'addanote'更改为其他东西以某种方式解决了问题。我不知道它会干扰'DisplayNotes'活动。需要公开。
您需要将此方法设为公共,如此处所述
https://developer.android.com/guide/topics/ui/controls/button#java
您在android:onClick属性中声明的方法必须具有完全如上所示的签名。具体来说,该方法必须:公开返回void将视图定义为其唯一参数(这将是单击的视图)
公开后,代码工作正常