【有书共读】《Android 7 编程入门经典(第四版) 》
《Android 7 编程入门经典(第四版) 使用Android studio 2 》
第三章
如下图目录所示,创建第一个Project
使用Intent链接Activity
一个Android应用可以不适用Activity或者包含多个Activity.当应用中有多个Activity时,就需要从一个Activity导航到另一个Actovity.在Android中,通过Intent来实现Activity之间打导航.
为理解这个非常重要却又有点抽象的概念,最好的方法是亲身经历病看看他能帮你完成什么.
**************************************** //跟书中源代码有很大区别,不过能实现功能!!!! ****************************************
修改AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.zhengwei.usingintent"> <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=".SecondActivity"> <intent-filter > <action android:name="com.example.zhengwei.usingintent.SecondActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>修改activity_second.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SecondActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SecondActivity!" android:id="@+id/textView" /> </RelativeLayout>修改SecondActivity.java
package com.example.zhengwei.usingintent; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } }
修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Main Activity!" android:id="@+id/textView" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Display second activity" android:onClick="onClick" android:id="@+id/button" android:layout_below="@+id/textView" android:layout_alignParentStart="true" android:layout_marginTop="56dp" /> </RelativeLayout>
修改MainActivity.java
package com.example.zhengwei.usingintent; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { int request_Code = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void onClick(View view) { //这里是个坑,这个函数变了,和书中的单参数函数不同了,分别是添加两个参数和三个参数的.被这坑了好久 //public void startActivityForResult(@RequiresPermission Intent intent, int requestCode) //public void startActivityForResult(@RequiresPermission Intent intent, int requestCode,@Nullable Bundle options) startActivityForResult(new Intent("com.example.zhengwei.usingintent.SecondActivity"),request_Code); } }
最终成果图
1.使用Intent对象返回结果
setActivity()方法可以调用另一个Activity,但是它无法将结果返回给当期的Activity.
如果需要从Activity传回数据,就需要使用startActivityResult()方法.
修改上述项目中的代码
1.1修改activity_second.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.zhengwei.usingintent.SecondActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is the Second Activity!" android:id="@+id/textView2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Please enter your name" android:id="@+id/textView3" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/txtUsername" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK" android:onClick="onClick" android:id="@+id/button2" /> </LinearLayout>
1.2修改SecondActivity.java
package com.example.zhengwei.usingintent; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.EditText; public class SecondActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); } public void onClick(View view) { Intent data = new Intent(); //---get the EditText view--- EditText txt_username = (EditText)findViewById(R.id.txtUsername); //---set the data to pass back--- data.setData(Uri.parse( txt_username.getText().toString())); setResult(RESULT_OK, data); //---closes the activity--- finish(); } }1.3修改MainActivity.java
package com.example.zhengwei.usingintent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
int request_Code = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onClick(View view) {
startActivityForResult(new Intent("com.example.zhengwei.usingintent.SecondActivity"),request_Code);
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {
Toast.makeText(this,data.getData().toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
效果如图