实验目的:
熟悉和掌握Android组件间通信的方式和技巧。
实验要求:
1. 运行课本的示例程序,理解组件通信的方式和过程
2.设计一个主Activity和一个子Activity(Sub-Activity),使用主Activity上的按钮启动子Activity,并将子Activity的一些信息返回给主Activity,并显示在主Activity上。
1 package com.flyuz.myapplication; 2 3 import android.content.Intent; 4 import android.net.Uri; 5 import android.support.v7.app.AppCompatActivity; 6 import android.os.Bundle; 7 import android.view.View; 8 import android.widget.Button; 9 import android.widget.TextView; 10 11 public class MainActivity extends AppCompatActivity { 12 Button bt1; 13 Button bt2; 14 TextView tv; 15 final int SUBACTIVITY1 = 1; 16 final int SUBACTIVITY2 = 2; 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 setTitle("MainActivity"); 22 bt1 = (Button) findViewById(R.id.bt1); 23 bt2 = (Button) findViewById(R.id.bt2); 24 tv = (TextView) findViewById(R.id.tv); 25 bt1.setOnClickListener(new View.OnClickListener() { 26 @Override 27 public void onClick(View view) { 28 Intent intent = new Intent(MainActivity.this, NewActivity1.class); 29 startActivityForResult(intent, SUBACTIVITY1); 30 } 31 }); 32 bt2.setOnClickListener(new View.OnClickListener() { 33 @Override 34 public void onClick(View view) { 35 Intent intent = new Intent(MainActivity.this, NewActivity2.class); 36 startActivityForResult(intent, SUBACTIVITY2); 37 } 38 }); 39 } 40 41 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 42 super.onActivityResult(requestCode, resultCode, data); 43 switch (requestCode) { 44 case SUBACTIVITY1: 45 if (resultCode == 1) { 46 Uri uriData = data.getData(); 47 tv.setText(uriData.toString()); 48 } 49 case SUBACTIVITY2: 50 if (resultCode == -1) { 51 Uri uriData = data.getData(); 52 tv.setText(uriData.toString()); 53 } 54 } 55 } 56 }
1 package com.flyuz.myapplication; 2 3 import android.net.Uri; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widget.EditText; 9 import android.content.Intent; 10 11 public class NewActivity1 extends AppCompatActivity { 12 Button btOk; 13 EditText et; 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_new1); 18 setTitle("NewActivity1"); 19 btOk = (Button)findViewById(R.id.btOK); 20 et = (EditText)findViewById(R.id.et); 21 btOk.setOnClickListener(new View.OnClickListener() { 22 @Override 23 public void onClick(View view) { 24 String str = et.getText().toString(); 25 Uri data = Uri.parse("来自NewActivity1的消息" + str); 26 Intent result = new Intent(null, data); 27 setResult(1, result); 28 finish(); 29 } 30 }); 31 } 32 }
1 package com.flyuz.myapplication; 2 3 import android.net.Uri; 4 import android.support.v7.app.AppCompatActivity; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.widget.Button; 8 import android.widget.EditText; 9 import android.content.Intent; 10 11 public class NewActivity2 extends AppCompatActivity { 12 Button btOk; 13 EditText et; 14 @Override 15 protected void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.activity_new1); 18 setTitle("NewActivity2"); 19 btOk = (Button)findViewById(R.id.btOK); 20 et = (EditText)findViewById(R.id.et); 21 btOk.setOnClickListener(new View.OnClickListener() { 22 @Override 23 public void onClick(View view) { 24 String str = et.getText().toString(); 25 Uri data = Uri.parse("来自NewActivity2的消息" + str); 26 Intent result = new Intent(null, data); 27 setResult(-1, result); 28 finish(); 29 } 30 }); 31 } 32 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 android:gravity="center" 8 tools:context=".MainActivity" 9 android:orientation="vertical"> 10 <Button 11 android:id="@+id/bt1" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:layout_weight="0.2" 15 android:text="进入NewActivity1!" /> 16 17 <Button 18 android:id="@+id/bt2" 19 android:layout_width="match_parent" 20 android:layout_height="wrap_content" 21 android:layout_weight="0.2" 22 android:text="进入NewActivity2!" /> 23 <TextView 24 android:id="@+id/tv" 25 android:layout_width="match_parent" 26 android:layout_height="wrap_content" 27 android:layout_weight="0.6" 28 android:text="" /> 29 30 </LinearLayout>
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:gravity="center" > 7 8 <LinearLayout 9 android:layout_width="match_parent" 10 android:layout_height="wrap_content" 11 android:orientation="horizontal" 12 android:gravity="center" > 13 14 <TextView 15 android:id="@+id/tv" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:layout_weight="0.2" 19 android:text="回信:" /> 20 21 <EditText 22 android:id="@+id/et" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:layout_weight="0.8" /> 26 </LinearLayout> 27 28 29 <Button 30 android:id="@+id/btOK" 31 android:layout_width="match_parent" 32 android:layout_height="wrap_content" 33 android:text="确定" /> 34 </LinearLayout>
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.flyuz.myapplication"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/AppTheme"> 12 <activity android:name=".MainActivity"> 13 <intent-filter> 14 <action android:name="android.intent.action.MAIN" /> 15 16 <category android:name="android.intent.category.LAUNCHER" /> 17 </intent-filter> 18 </activity> 19 20 <activity android:name=".NewActivity1"> 21 <intent-filter> 22 <action android:name="android.intent.action.VIEW" /> 23 24 <category android:name="android.intent.category.DEFAULT" /> 25 </intent-filter> 26 </activity> 27 28 <activity android:name=".NewActivity2"> 29 <intent-filter> 30 <action android:name="android.intent.action.VIEW" /> 31 32 <category android:name="android.intent.category.DEFAULT" /> 33 </intent-filter> 34 </activity> 35 36 </application> 37 38 </manifest>
隐式启动:
1 bt.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 Intent intent = new Intent("android.intent.action.VIEW"); //<action android:name="android.intent.action.VIEW" /> 这里的 5 Toast.makeText(getApplicationContext(), "隐式启动", Toast.LENGTH_SHORT).show(); 6 startActivityForResult(intent, SUBACTIVITY); 7 } 8 });