《移动终端软件开发技术》第四周作业:组件通信与广播消息

/ 0评 / 0

第四部分课后作业:

编程实现具有“登录”按钮的主界面,点击“登录”按钮后打开一个新的Activity,新打开的Activity上面有输入用户名和密码的控件,在用户关闭这个Activity后,将用户名和密码传递到主界面的Activity中。

提交记录文档与源码

按作业的最低要求来设计界面,主界面只需要一个登录按钮和一个用来显示返回信息的文本框,弹出的副界面有两个标签和两个输入框。

使用网格布局。主界面是activity_main.xml,副界面是login.xml

android:layout_columnSpan表示横跨多少列,row同理。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:rowCount="3"
    android:columnCount="3"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/name"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:text="用户名:"/>

    <TextView
        android:id="@+id/password"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"
        android:text="密码:"/>

    <Button
        android:layout_columnSpan="3"
        android:text="登录"
        android:id="@+id/btn1"/>

</GridLayout>

login.xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:rowCount="3"
    android:columnCount="4"
    android:orientation="horizontal">

    <TextView
        android:text="用户名:"/>

    <EditText
        android:id="@+id/nametext"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"/>

    <TextView
        android:text="密码:"/>

    <EditText
        android:id="@+id/passwordtext"
        android:layout_columnSpan="3"
        android:layout_gravity="fill"/>

    <Button
        android:layout_columnSpan="4"
        android:id="@+id/quit"
        android:text="退出"/>

</GridLayout>

我使用的是显式启动的方法,在登录按钮上绑定listener函数。并使用startActivityForResult函数启动activity。

在onActivityResult函数中接受副界面返回的intent,我使用键值对的方式区分返回的数据是用户名还是密码。

使用getStringExtra获取指定字符串。

MainActivity.java

package bupt.hkt2017211874.lab04;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {

    private static final int SUBACTIVITY1 = 1;//标识符
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//选择布局

        //在登录按钮上绑定intent启动的函数
        final Button btn1 = (Button)findViewById(R.id.btn1);
        btn1.setOnClickListener(new OnClickListener(){
            //使用显式启动
            public void onClick(View view){
                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                startActivityForResult(intent, SUBACTIVITY1);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //将接受到的数据,根据标签,修改text
        if(requestCode==1 && resultCode == RESULT_OK){
            TextView text1= (TextView) findViewById(R.id.name);
            TextView text2= (TextView) findViewById(R.id.password);
            text1.setText("用户名:"+data.getStringExtra("name"));
            text2.setText("密码:"+data.getStringExtra("password"));
        }
    }
}

先获取组件,在用getText().toString()得到组件上输入的字符串。

将字符串用putExtra()方法放入intent,最后用setResult()发送intent。

最后还有finish()关闭界面。

LoginActivity.java

package bupt.hkt2017211874.lab04;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class LoginActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);//选择布局

        //设置绑在退出按钮的函数
        //当窗口退出,将输入框中的内容返回给主界面
        Button btn=(Button)findViewById(R.id.quit);

        btn.setOnClickListener(new OnClickListener(){
            public void onClick(View view) {
                EditText editText1=(EditText) findViewById(R.id.nametext);
                EditText editText2=(EditText) findViewById(R.id.passwordtext);
                String string1 = editText1.getText().toString();
                String string2 = editText2.getText().toString();

                //使用putExtra函数传递多个字符串,用键值对区分
                Intent intent=new Intent();
                intent.putExtra("name",string1);
                intent.putExtra("password",string2);


                setResult(RESULT_OK, intent);
                //关闭
                finish();
            }
        }
        );
    }

}

直接在application下添加activity

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

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="bupt.hkt2017211874.lab04">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".LoginActivity">

        </activity>
    </application>

</manifest>

运行效果:

点击登录按钮弹出另一个界面

在输入框中输入用户名和密码,然后点击退出按钮

信息从副界面传递到了主界面。

调试心得:

调试过程中出现,按下登录按钮程序自动退出的问题。原因是没有在AndroidManifest.xml注册LoginActivity。

可能出现类似Your anti-virus program might be impacting your build performance.这样的输出信息。意思是杀毒程序可能会影响编译速度,不属于报错,可以根据情况将SDK文件夹加入杀毒软件的白名单中。

发表评论

电子邮件地址不会被公开。 必填项已用*标注