一、实验目的与要求
(1)了解使用Intent进行组件通信的原理
(2)掌握使用Intent启动Activity的方法
(3)掌握Activity间数据传送的方法
(4)掌握对话框的使用方法
二、实验软
、
硬件环境
- 硬件:PC电脑一台
- 配置:winxp、win7、win10系统,内存大于4G,硬盘250G以上,JDK8,Android Studio IDE安装软件
三、实验内容
(1)设计一个主Activity和一个子Activity。主Activity界面上有一个“登录”按钮和一个用于显示信息的TextView,单击“登录”按钮后打开一个新的Activity,新Activity上面有输入用户名、密码的控件,在用户关闭这个Activity后,将用户输入的用户名和密码传递到主Activity,如果用户名和密码正确,则主A
ctivity
上的T
extView
显示“某某用户已登录”,否则弹出一个消息对话框,显示“用户名或密码错误”。
(2)在(1)的主界面上增加一个“注册”按钮。单击“注册”按钮后打开另一个新的A
ctivity
,新的A
ctivity
上除了用户名和密码的控件外,还有“确定”和“取消”按钮,如果单击“确定”按钮,则用户信息在主A
ctivity
的T
extView
上显示,再次登录时该用户名和密码有效;如果单击“取消”按钮,则直接返回主A
ctivity
页面。
(3)在(1)中用对话框的方式显示用户登录界面,实现用户登录功能。
解决方法:
在主Activity的布局文件activity_main.xml中添加“登录”和“注册”按钮以及用于显示信息的TextView。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"/>
<Button
android:id="@+id/register_button"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="注册"/>
<TextView
android:id="@+id/info_text_view"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java:
package com.example.asdf;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_LOGIN = 100;
private static final int REQUEST_CODE_REGISTER = 101;
private TextView mInfoTextView;
private String mUsername = "";
private String mPassword = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mInfoTextView = findViewById(R.id.info_text_view);
Button loginButton = findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivityForResult(intent, REQUEST_CODE_LOGIN);
}
});
Button registerButton = findViewById(R.id.register_button);
registerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivityForResult(intent, REQUEST_CODE_REGISTER);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_CODE_LOGIN:
String username = data.getStringExtra("username");
String password = data.getStringExtra("password");
if (username.equals(mUsername) && password.equals(mPassword)) {
mInfoTextView.setText(username + "已登录");
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("错误");
builder.setMessage("用户名或密码错误");
builder.setPositiveButton("确定", null);
builder.show();
}
break;
case REQUEST_CODE_REGISTER:
mUsername = data.getStringExtra("username");
mPassword = data.getStringExtra("password");
mInfoTextView.setText(mUsername + "已注册");
break;
}
}
}
}
在注册页面RegisterActivity中的布局文件register_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/register_activity"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/username_edit_text"
android:hint="用户名"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/password_edit_text"
android:hint="密码"
android:inputType="textPassword"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/confirm_button"
android:text="确定"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/cancel_button"
android:text="取消"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
RegisterActivity.java:
package com.example.asdf;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
public class RegisterActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_activity);
final EditText usernameEditText = findViewById(R.id.username_edit_text);
final EditText passwordEditText = findViewById(R.id.password_edit_text);
Button confirmButton = findViewById(R.id.confirm_button);
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username = usernameEditText.getText().toString().trim();
String password = passwordEditText.getText().toString().trim();
Intent intent = new Intent();
intent.putExtra("username", username);
intent.putExtra("password", password);
setResult(RESULT_OK, intent);
finish();
}
});
Button cancelButton = findViewById(R.id.cancel_button);
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setResult(RESULT_CANCELED);
finish();
}
});
}
}
当然了,引用了两个Java文件,我们也需要在AndroidiMainfest文件做出修改:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.Asdf"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".RegisterActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
运行即可输出结果,格式可以自己调节大小