这是我的第一个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)
答案 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);
}
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;
}
}
}