java - TextView.setOnClickListener 没有移动到新活动
问题描述
因此,我正在尝试学习如何制作类似 Instagram 的应用程序。
我创建了登录和注册活动。
我现在的问题是我有一个应该可以点击的文本视图并将我切换到不同的活动。
sign_up_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
Intent signUpIntent = new Intent(LoginActivity.this, RegistrationActivity.class);
startActivity(signUpIntent);
}
});
这段代码应该将我切换到 RegistrationActivity 但是当我点击 textview 时它会闪烁屏幕但停留在登录页面上。然后,当我再次单击 textview 时,它会使应用程序崩溃并给我这个错误。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
at com.ssmc.instagram.RegistrationActivity.onCreate(RegistrationActivity.java:58)
错误是指注册活动中的这段代码。
signing_up_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
register();
}
});
但这是用于注册帐户的按钮。但在应用程序中,xml 页面仍然是登录活动,它没有更改为注册活动。
编辑: sign_up_btn 变量是这样的:
sign_up_btn = (TextView) findViewById(R.id.sign_up_btn);
Edit2:有些人要求查看活动的 xml 视图文件。所以他们在这里。
活动登录.xml
<?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:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/login_container"
android:padding="40dp"
android:background="@drawable/animation_color"
tools:context=".LoginActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="100dp"
android:src="@drawable/instagram_logo"
android:layout_marginBottom="40dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Username"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_profile"
android:inputType="textPersonName"
android:id="@+id/login_user_name"
android:drawablePadding="10dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Password"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_lock"
android:inputType="textPassword"
android:id="@+id/login_password"
android:drawablePadding="10dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:id="@+id/login_btn"
android:text="@string/log_in"
android:textColor="#cccccc"
android:background="@color/colorPurple"
android:textAllCaps="false"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:text="Not a member, Sign up now!"
android:textColor="#ffffff"
android:textSize="16dp"
android:id="@+id/sign_up_btn" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:text="Forgot Password?"
android:textColor="#ffffff"
android:textSize="16dp"
android:id="@+id/forgot_pass_btn"/>
</LinearLayout>
和activity_registration.xml
<?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:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/login_container"
android:padding="40dp"
android:background="@drawable/animation_color"
tools:context=".LoginActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="100dp"
android:src="@drawable/instagram_logo"
android:layout_marginBottom="40dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Email"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_email"
android:inputType="textPersonName"
android:id="@+id/register_user_email"
android:drawablePadding="10dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Username"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_profile"
android:inputType="textPersonName"
android:id="@+id/register_user_name"
android:drawablePadding="10dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Password"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_lock"
android:inputType="textPassword"
android:id="@+id/register_password"
android:drawablePadding="10dp" />
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Confirm Password"
android:textColor="@color/colorWhite"
android:textSize="20sp"
android:backgroundTint="#fff"
android:drawableLeft="@drawable/ic_lock"
android:inputType="textPassword"
android:id="@+id/register_password_confirm"
android:drawablePadding="10dp" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:id="@+id/signing_up_btn"
android:text="Sign Up"
android:textColor="#cccccc"
android:background="@color/colorPurple"
android:textAllCaps="false"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="16dp"
android:text="Already have an Account?"
android:textColor="#ffffff"
android:textSize="16dp"
android:id="@+id/go_to_login_btn"/>
</LinearLayout>
Edit3:这是 LoginActivity 的主要代码:
public class LoginActivity extends AppCompatActivity {
LinearLayout mLoginContainer;
AnimationDrawable mAnimationDrawable;
EditText username_et, password_et;
ProgressDialog mProgressDialog;
Button login_btn;
TextView sign_up_btn, forgot_pass_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mLoginContainer = (LinearLayout) findViewById(R.id.login_container);
mAnimationDrawable = (AnimationDrawable) mLoginContainer.getBackground();
mAnimationDrawable.setEnterFadeDuration(5000);
mAnimationDrawable.setExitFadeDuration(2000);
username_et = (EditText) findViewById(R.id.login_user_name);
password_et = (EditText) findViewById(R.id.login_password);
mProgressDialog = new ProgressDialog(this);
login_btn = (Button) findViewById(R.id.login_btn);
sign_up_btn = (TextView) findViewById(R.id.sign_up_btn);
forgot_pass_btn = (TextView) findViewById(R.id.forgot_pass_btn);
login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LogIn();
}
});
sign_up_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent signUpIntent = new Intent(LoginActivity.this, RegistrationActivity.class);
signUpIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(signUpIntent);
}
});
forgot_pass_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
}
}
这是RegistrationActivity的代码:
public class RegistrationActivity extends AppCompatActivity {
LinearLayout mRegistrationContainer;
AnimationDrawable mAnimationDrawable;
EditText user_email_et, user_name_et, password_et, password_confirm_et;
ProgressDialog mProgressDialog;
Button signing_up_btn;
TextView go_to_login_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mRegistrationContainer = (LinearLayout) findViewById(R.id.login_container);
mAnimationDrawable = (AnimationDrawable) mRegistrationContainer.getBackground();
mAnimationDrawable.setEnterFadeDuration(5000);
mAnimationDrawable.setExitFadeDuration(2000);
user_email_et = (EditText) findViewById(R.id.register_user_email);
user_name_et = (EditText) findViewById(R.id.register_user_name);
password_et = (EditText) findViewById(R.id.register_password);
password_confirm_et = (EditText) findViewById(R.id.register_password_confirm);
mProgressDialog = new ProgressDialog(this);
signing_up_btn = (Button) findViewById(R.id.signing_up_btn);
go_to_login_btn = (TextView) findViewById(R.id.go_to_login_btn);
signing_up_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
register();
}
});
go_to_login_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
startActivity(new Intent(RegistrationActivity.this, LoginActivity.class));
}
});
}
}
解决方案
你的问题很清楚。RegistrationActivity
启动。但是,在RegistrationActivity.onCreate()
你这样做:
setContentView(R.layout.activity_login);
因此,您正在使用来自的布局 XML 文件,LoginActivity
而不是来自RegistrationActivity
. 这就是屏幕“闪烁”但似乎没有变化的原因。它正在改变,但布局与以前的相同Activity
。它还解释了调用setOnClickListener()
失败的原因,因为您使用了错误的布局 XML 文件。
推荐阅读
- sql - 没有值时如何更新列值
- server - Prestashop,尝试访问后台时出现错误 500
- sql-server - 如何使用 VBA 格式化从 SQL Server 插入的数据到 Excel 表中?
- git - git 'mv' 没有将每个文件都标记为重命名(删除/添加了几个)
- terraform - 错误:创建 IAM 用户 abc@123.com 时出错:EntityAlreadyExists:名称为 abc@123.com 的用户已存在
- html - 在视图中查看布局问题
- spring - 关于 Spring 中的 BCryptedPasswordEncoder
- python - API + 请求
- powerbuilder - 在空格后显示字符
- python - 线程中全局变量的作用域如何工作?