向Android Studio添加活动

时间:2018-04-13 09:59:47

标签: 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>

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>

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

我想要发生的是...... 当&#34;登录&#34;单击按钮我得到&#34;点击登录按钮的短时间消息!&#34;。

正在发生什么...... 该应用关闭并显示错误&#34;遗憾的是Project1已停止&#34;。

我尝试了什么......

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

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

<activity
    android:name=".LoginActivity">
</activity>

我感谢我能得到的任何指导。

在有人评论之前......是的,我花了很多时间搜索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

最新崩溃日志

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)

9 个答案:

答案 0 :(得分: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" />
  

编辑

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

答案 1 :(得分:2)

你已经在按钮上设置了onClick方法

<Button

        **android:onClick="onClick"**
      />

无需在LoginActivity中实现View.OnClickListener

答案 2 :(得分:2)

为你明确的代码 首先使用constructor(props) { super(props); this.state = { choices: null, answered: false, }; this.setAnswered = this.setAnswered.bind(this); this.renderChoice = this.renderChoice.bind(this); this.showData = this.showData.bind(this); } 方法并使您的布局受到影响......

像这样:

**Oncreate()**

然后使用你的xml字段(Button feild):

public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content_main);
    }
  1. 最后完全使用此代码
  2. public void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.content_main);
    
     // Your Button 
                Button button= (Button)findviewbyId(R.id.button);
    
    // button clicking event 
           button.setOnClickListener(this);
    
     }
    

答案 3 :(得分:1)

感谢大家的帮助,但最终这对我有用......

步骤1)将此代码从LoginActivity.java移动到MainActivity.java

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

步骤2)在LoginActivity.java中,更改

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

public class LoginActivity extends AppCompatActivity {

并添加

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_layout);
}

最终的LoginActivity.java文件

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_layout);
    }
}

现在它有效。 :)

答案 4 :(得分:0)

您需要实现onCreate()来扩充yout布局

Dim XXXX As String

XXXX = Application.WorksheetFunction.Average(Range("J7:J607"))
Sheets("Log").Cells(2, "Z").Value = XXXX

如果你没有用setContentView(R.layout.login_layout)来扩充你的布局,你的活动就不知道Id“R.id.btnLogin”所属的位置。

答案 5 :(得分:0)

你没有夸大你的布局。你必须按ctrl + O覆盖你的onCreate方法。

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_layout)
 }

如果你想要onClick侦听器,你要定义

 android:onClick="onClick"
中的

并创建如下方法

public void onClick(View view){
   Toast.makeText(this, "Login button clicked!", Toast.LENGTH_SHORT).show();
}

或者像在代码中一样实现View.listeners。 但你不能两者兼顾。

答案 6 :(得分:0)

首先使用override方法创建和设置布局视图。从活动或布局中将click listener设置为按钮。我从活动类设置它。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Button loginBtn = (Button) findViewById(R.id.btnLogin);
loginBtn.setOnClickListener(this);
}

答案 7 :(得分:0)

只需执行以下流程:

1)对,点击app Package。 2)新活动空活动 3)将XML代码复制到activity_main.xml文件。 4)MainActivity.java的Java代码。

答案 8 :(得分:-1)

您已在xml中声明为android:onClick="onClick"

  

java.lang.IllegalStateException:找不到方法onClick(查看)

您收到此异常,因为您尚未定义该方法。因此,在您的活动中声明一个名为&#34; onClick&#34; 的方法。

只需 remove @Override and implements View.OnClickListener

试试这个,

public class LoginActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.loginactivity);
}

public void onClick(View view) {
    switch (view.getId()){
        case R.id.button:
            Toast.makeText(this, "Login button clicked!", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
  }
}