實驗目的
目錄
- 實驗要求
- 實驗結果
- 實驗代碼
- father.xml:主界面檔案
- content_child.xml:子界面
- Fourth.java: 處理檔案
- ChildActivity.java: 子界面處理檔案
- 實驗總結
- 了解使用Intent進行元件通信原理
- 掌握使用Intent啟動Activity的方法
- 熟悉和掌握Android元件間通信的方式和技巧
設計一個主Activity和一個子Activity(Sub-Activity),使用主Activity上的按鈕啟動子Activity,并将子Activity的一些資訊傳回給主Activity,并顯示在主Activity上。
graph LR
Activity --1.start--> Sub-Activity
Sub-Activity --2.return&show--> Activity
場景解釋:
輸入目前使用者名->确認->輸入新的使用者名->确認->傳回原始界面
請輸入目前的使用者名 --1.确認--> 請輸入新的使用者名
請輸入新的使用者名 --2.輸入并确認--> 請輸入目前的使用者名
請輸入新的使用者名 --3.傳回--> 請輸入目前的使用者名
進入使用者主界面
點選登入以後輸入新的名字
點選确認以後
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Space
android:layout_width="match_parent"
android:layout_height="150dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="歡迎你,"
android:textSize="20dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="請輸入使用者名!"
android:id="@+id/tv_resetName"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用者名:"
android:textSize="20dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_name"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Space
android:layout_width="120dp"
android:layout_height="match_parent"
android:layout_weight="2"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登入"
android:textSize="15dp"
android:layout_weight="1"
android:id="@+id/btn_login"
/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Space
android:layout_width="match_parent"
android:layout_height="150dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="歡迎你,"
android:textSize="20dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="請輸入使用者名!"
android:id="@+id/tv_resetName"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用者名:"
android:textSize="20dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/et_name"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Space
android:layout_width="120dp"
android:layout_height="match_parent"
android:layout_weight="2"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登入"
android:textSize="15dp"
android:layout_weight="1"
android:id="@+id/btn_login"
/>
</LinearLayout>
</LinearLayout>
package com.example.administrator.fourth;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Fourth extends AppCompatActivity {
private static final int SUBACTIVITY1 = 1;
TextView tv_resetName;
Button btn_login;
EditText et_name;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == SUBACTIVITY1)
{
if(resultCode == RESULT_OK)
{
Uri uriData = data.getData();
tv_resetName.setText(uriData.toString());
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.father);
tv_resetName = (TextView)findViewById(R.id.tv_resetName);
btn_login = (Button)findViewById(R.id.btn_login);
et_name = (EditText)findViewById(R.id.et_name);
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Fourth.this,ChildActivity.class);
intent.putExtra("Name",et_name.getText().toString());
startActivityForResult(intent,SUBACTIVITY1);
}
});
}
}
package com.example.administrator.fourth;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ChildActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_child);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final EditText et_resetName = (EditText)findViewById(R.id.et_resetName);
Button btn_sure = (Button)findViewById(R.id.btn_sure);
TextView tv_newUser = (TextView)findViewById(R.id.tv_newUser);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
Intent data = getIntent();
tv_newUser.setText(data.getStringExtra("Name"));
btn_sure.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String uriString = et_resetName.getText().toString();
Uri data = Uri.parse(uriString);
Intent result = new Intent(null,data);
setResult(RESULT_OK,result);
finish();
}
});
}
}
通過本次實驗,主要是熟悉了Intent的用法,Intent可以看做一封信,用來解決Android應用的各元件之間的通信,他負責對應用中動作,動作涉及的資料,附加資料進行描述,Android則負責根據描述,找到對應的元件,将Intent傳遞到被調用的元件,并完成元件的調用。
- 父Activity獲得子activity分為三步:
- 在父activity中的按鈕監聽器中顯示啟動子activity
Intent intent = new Intent(MainActivity.this,SubActivity.class); startActivityForResult(intent,SUBACTIVITY1); //SUBACTIVITY1是該activity的靜态标志
-
在子activity調用finish關閉之前調用setResult傳回
其中需要傳回内容對其進行包裝
String uriString = et_resetName.getText().toString(); Uri data = Uri.parse(uriString); Intent result = new Intent(null,data); setResult(RESULT_OK,result); finish();
通用資源标志符(Universal Resource Identifier, 簡稱"URI")。
Uri代表要操作的資料,Android上可用的每種資源 - 圖像、視訊片段等都可以用Uri來表示,我們很經常需要解析Uri,并從Uri中擷取資料。setResult函數可以設定結果碼和傳回值,傳遞給父activity
- 在父activity中寫onActivityResult函數擷取傳回值
if(requestCode == SUBACTIVITY1) { if(resultCode == RESULT_OK) { Uri uriData = data.getData(); tv_resetName.setText(uriData.toString()); } }
- 子activity收到父activity
- 父activity中的處理
Intent intent = new Intent(Fourth.this,ChildActivity.class); intent.putExtra("Name",et_name.getText().toString()); startActivityForResult(intent,SUBACTIVITY1);
- 子activity中的處理
Intent data = getIntent(); tv_newUser.setText(data.getStringExtra("Name"));
代碼改變世界