Android實現頁面跳轉------隱式Intent
在上一篇文章中我介紹了使用Intent顯式來實現頁面向下跳轉,接下來這篇文章主要介紹的是使用Intent隱式來實現向上跳轉,什么意思呢,就是當我們從第一個頁面跳轉到第二個頁面的時候我們可以從第二個頁面跳轉回去.
通過查閱文檔你會發現Activity中還有一個startActivityForResult()方法也是用于啟動活動的,但是這個方法期望在活動銷毀的時候能返回一個結果給上一個活動,毫無疑問這就是我們所要達到的效果.
startActivityForResult()方法接收2個參數,第一個參數還是Intent,第二個參數是請求碼,用于回調中判斷數據源的來源,我們可以在之前的代碼中修改下如圖
package com.example.testintent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button bt;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivity(intent);
}
});
tv = (TextView) findViewById(R.id.text);
bt = (Button) findViewById(R.id.button2);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
/**
* 第一個參數是Intent對象
* 第二個參數是請求的一個標識
*/
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一個界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
}
}
添加如下代碼
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivityForResult(intent,1);
這里使用了startActivityForRresult()方法來啟動MainActivity,請求碼只要是一個唯一值就可以了,接下來我們在FirstActivity中添加監聽器就可以
package com.example.testintent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class FirstActivity extends AppCompatActivity {
private Button bt;
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
bt = (Button) findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.putExtra("data_return","返回到第一個界面");
setResult(RESULT_OK,intent);
finish();
}
});
}
}
這里需要介紹幾個知識點
Intent中提供了一系列putExtra()方法的重載,可以把我們想要的數據暫存在Intent中,在這里putExtra()接收了2個參數,第一個參數是鍵,第二個參數是是我們真正要傳遞的數據..
接下來在看setResult()這個方法接收2個參數,第一個參數用于向上一個活動處理結果,一般只是用RESULT_OK或者RESULT_CANCELED兩個值,第二個參數則把帶有數據的Intent傳遞回去,然后調用finish()方法來銷毀當前活動.
由于我們使用的startActivityForResult()方法啟動FIrstActivity的,所以我們需要在FIrstActivity被銷毀之后回調上一個活動的onACtivityResult()方法,因此我們需要在MainActivity中寫這個方法來得到返回的數據
package com.example.testintent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private Button bt;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = (Button) findViewById(R.id.button1);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
startActivity(intent);
}
});
tv = (TextView) findViewById(R.id.text);
bt = (Button) findViewById(R.id.button2);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,FirstActivity.class);
/**
* 第一個參數是Intent對象
* 第二個參數是請求的一個標識
*/
startActivityForResult(intent,1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一個界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
}
}
也就是這個方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("data_return");
tv.setText("返回到第一個界面");
Log.d("MainActivity",returnData);
}
break;
default:
break;
}
onActivityResult()方法帶有三個參數,第一個參數requestCode即在我們啟動活動的時候傳入的請求碼,第二個參數resultCode是我們返回數據時傳入的處理結果,第三個參數data是我們返回數據的Intent
然后我們點擊運行如圖
點擊第二個按鈕
在點擊一下
我們想要的結果就實現了
智能推薦
隱式Intent解析
回顧Android中的隱式Intent的相關知識點。 概述 使用 action標簽 category標簽 data標簽 mimeType scheme host port path pathPrefix pathPattern data總結 從網頁啟動app 概述 隱式啟動主要解決了界面間的跳轉解耦,主要涉及intent-filter中的三個標簽: category action data 它們構...
隱式Intent
啟動自己程序內的Activity 不明確指出啟動哪一個活動,指定一系列action和category,信息交給系統處理,找到適合啟動的活動。 只有當action和category中的內容同時匹配Intent中指定的action和category時,Intent才能被啟動。 AndroidManifest.xml 因為android.intent.category.DEFAULT是默認的catego...
Android理解:顯式和隱式Intent
intent就是意圖的意思。Intent分兩種:顯式(Explicit intent)和隱式(Implicit intent)。 一、顯式(設置Component) 顯式,即直接指定需要打開的activity對應的類。 以下多種方式都是一樣的,實際上都是設置Component直接指定Activity類的顯式Intent,由MainActivity跳轉到SecondActivity: 1、構造方法傳...
Android Intent 隱式與顯式意圖
意圖的應用場景:一般開啟系統的應用用隱式意圖 開啟自己應用的界面用顯示意圖 1,隱式意圖 :通過指定一組動作和數據來開啟頁面 【1】注意事項,當setdata方法和settype方法清除效果,我們是使用intent.setDataAndType方法 ★setType 方法 會自動清楚set...
利用Intent隱式跳轉,實現手動選擇打開符合條件的應用程序
先看實現效果: 實現如上圖一樣的效果,可以手動選擇打開手機上符合條件的應用程序,用于程序中的一些功能,比如程序中分享功能,將手機上符合分享條件的所有程序彈出來供使用人手動選擇;再比如手機白名單的實現! 實現原理:使用Intent的隱示意圖跳轉實現,具體代碼如下 AndroidManifest.xml中的配置: action中填寫自定義的名稱,這個名稱為過濾的內容之一,當兩個程序的name一樣時,在...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...