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,但当我单击文本视图时,它会闪烁屏幕,但会停留在登录页面上。然后,当我再次点击文本视图时,它会崩溃应用程序,并给我这个错误。

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

第2版:一些人要求查看活动的xml视图文件。他们来了。

activity_login.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>

第3版:以下是登录活动的主要代码:

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

因此,您再次使用LoginActivity中的布局XML文件,而不是RegistrationActivity中的布局文件。这就是为什么屏幕";闪烁";但似乎没有改变。它正在更改,但布局与以前的Activity相同。它还解释了调用setOnClickListener()失败的原因,因为您使用了错误的布局XML文件。

编辑:在充分理解您的问题后,我建议您使用onClick方法。

在按钮的xml代码中添加以下内容android:onClick="gotoLogin"现在,它将在行上显示红色点击,并实现方法,现在转到Java文件,添加您想为该点击操作执行的代码。这样一来,您就可以在java文件中添加id资源。

请告诉我这是否有效

删除finish((;从代码和XML中设置文本视图可点击为假

最新更新