向Android Studio添加活动

Kuy*_*uya -4 android android-layout android-studio

这是我的第一个Android应用程序.我正在尝试做一些应该相对简单的事情,但我似乎无法让它发挥作用.

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.project1.project1">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/icon_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/icon_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".LoginActivity">
        <intent-filter>
            <action android:name="android.intent.action.DEFAULT" />
        </intent-filter>
    </activity>
</application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

login_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:layout_height="match_parent"
android:background="@color/loginSignup1Background"
tools:context=".LoginActivity">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="16dp"
        android:text="@string/login_title"
        android:textAppearance="@style/TextAppearance.AppCompat.Headline" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:contentDescription="Login Icon"
        app:srcCompat="@mipmap/ic_login_black" />

    <EditText
        style="@style/LoginSignUp1Input"
        android:hint="@string/hint_email"
        android:inputType="textEmailAddress" />

    <EditText
        style="@style/LoginSignUp1Input"
        android:hint="@string/hint_pw"
        android:inputType="textPassword" />

    <Button
        android:id="@+id/btnLogin"
        style="@style/ButtonOrange"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="30dp"
        android:onClick="onClick"
        android:text="@string/btn_login"
        android:textAllCaps="false"
        android:textColor="@android:color/white" />

</LinearLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

LoginActivity.java

package com.project1.project1;

import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.btnLogin:
            Toast.makeText(this, "Login button clicked!", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我想要发生的是......当点击"登录"按钮时,我得到"点击登录按钮!"的短时间消息.

发生了什么...应用关闭错误"遗憾的是Project1已停止".

我试过的......

清单文件中的不同代码变体:

<activity
    android:name=".LoginActivity">
    <intent-filter>
        <action android:name="android.intent.action.DEFAULT" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

<activity
    android:name=".LoginActivity">
</activity>
Run Code Online (Sandbox Code Playgroud)

我很感激能得到的任何指导.

在任何评论之前......是的,我花了很多时间搜索StackOverflow并且无法找到解决方案.

编辑:

堆栈跟踪

04-13 17:50:54.162 22926-22926/com.project1.project1 D/AndroidRuntime: Shutting down VM
04-13 17:50:54.163 22926-22926/com.project1.project1 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.project1.project1, PID: 22926
    java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnLogin'
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
        at android.view.View.performClick(View.java:5205)
        at android.view.View$PerformClick.run(View.java:21162)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5452)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
04-13 17:55:54.278 22926-22926/com.project1.project1 I/Process: Sending signal. PID: 22926 SIG: 9
Run Code Online (Sandbox Code Playgroud)

最新的崩溃日志

04-13 18:47:19.845 30895-30895/com.project1.project1 D/AndroidRuntime: Shutting down VM
04-13 18:47:19.850 30895-30895/com.project1.project1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.project1.project1, PID: 30895
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnLogin'
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
    at android.view.View.performClick(View.java:5205)
    at android.view.View$PerformClick.run(View.java:21162)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5452)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:762)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
Run Code Online (Sandbox Code Playgroud)

Nil*_*hod 5

android:onClick="onClick"从你的Button.删除login_layout.xml

<Button
        android:id="@+id/btnLogin"
        style="@style/ButtonOrange"
        android:layout_width="match_parent"
        android:layout_height="46dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="30dp"
        android:text="@string/btn_login"
        android:textAllCaps="false"
        android:textColor="@android:color/white" />
Run Code Online (Sandbox Code Playgroud)

编辑

在你的下面进行以下更改 LoginActivity

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    Button loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_layout);
        loginButton=findViewById(R.id.btnLogin);
        loginButton.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btnLogin:
                Toast.makeText(this, "Login button clicked!", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)