您好,登錄后才能下訂單哦!
Intent 是 Android 各組件之間進行交互的一種重要方式,一般被用于啟動活動、啟動服務(wù)以及發(fā)送廣播等場景。
顯式 Intent:
Intent 有多個構(gòu)造函數(shù)重載,其中一個 Intent(Context packageContext,Class cls)。第一個參數(shù)要求提供一個啟動活動的上下文,第二個參數(shù)是指向想要啟動的目標(biāo)活動。創(chuàng)建好 Intent 后,用 startActivity() 方法啟動即可。
如下,在 MainActivity 中的一個按鈕的點擊后,啟動 first_activity:
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,first_activity.class);
startActivity(intent);
}
隱式 Intent:
隱式 Intent 不像顯式那樣明確指出要啟動哪一個活動,而是指定一系列更為抽象的 action 和 category 等信息,只有當(dāng)action 和 category 信息完全匹配時才能成功啟動。
首先在 AndroidManifest.xml 中的 標(biāo)簽下配置 內(nèi)容,如下:
其中 標(biāo)簽中指明活動可以響應(yīng) com.lodge.myapplication.ACTION_START 。然后在另一個 activity 中按鈕的點擊事件添加如下代碼:
button_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.lodge.myapplication.ACTION_START"); //隱式Intent;
startActivity(intent);
}
});
這里的 intent 是另一個構(gòu)造函數(shù),直接將 action 的字符串傳了進去,表示想要啟動能夠響應(yīng) com.lodge.myapplication.ACTION_START 這個 action 的活動。另外,因為 category 參數(shù)設(shè)置為 android.intent.category.DEFAULT ,代表默認(rèn)設(shè)置,所以在 intent 中未加入 category。
其實每個 intent 中只能指定一個 action,但卻能指定多個 category。例如:
button_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.lodge.myapplication.ACTION_START"); //隱式Intent;
intent.addCategory("com.lodge.myapplication.MY_CATEGORY");
startActivity(intent);
}
});
當(dāng)然,在 AndroidManifest.xml 中 標(biāo)簽下的 里也要添加 內(nèi)容,如下:
更多隱式 intent:
使用隱式 intent 啟動其他程序的活動。例如打開系統(tǒng)瀏覽器,在按鈕點擊事件中添加如下代碼:
button_3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW); //更多隱式Intent;
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});
這里的 Intent.ACTION_VIEW 是內(nèi)置動作。
向下一個活動傳遞數(shù)據(jù):
Intent 中的 putExtra() 方法可以把我們想要傳遞的數(shù)據(jù)保存在 Intent 中,啟動另一個活動后,再把數(shù)據(jù)從 Intent 中取出即可。
//上一個活動傳送數(shù)據(jù);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "hello intent put_Extra";
Intent intent = new Intent(MainActivity.this,first_activity.class);
intent.putExtra("extra_data",data); //傳遞數(shù)據(jù),第一個參數(shù)是鍵值,后一個參數(shù)是要傳遞的數(shù)據(jù);
startActivity(intent);
}
});
//下一個活動獲取數(shù)據(jù);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
Intent intent = getIntent(); //獲取用于啟動本activity的intent;
String data = intent.getStringExtra("extra_data"); //傳入相應(yīng)鍵值,獲得數(shù)據(jù);
Log.d("first_activity",data); //打印數(shù)據(jù);
}無錫專業(yè)婦科醫(yī)院 http://www.xasgyy.net
返回數(shù)據(jù)給上一個活動:
Activity 中有一個 startActivityForResult() 方法也是用于啟動活動的,但是這個方法期望在活動銷毀的時候能夠返回一個結(jié)果給上一個活動。
//啟動活動;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,second_activity.class);
startActivityForResult(intent,1); //接收啟動的下一個活動返回的數(shù)據(jù),第二個參數(shù)是請求碼,只要是唯一值就行,這里是 1 ;
}
});
@Override
//重寫onActivityResult()方法,用于響應(yīng)startActivityForResult()方法啟動的活動;
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode)
{
case 1:
if(resultCode == RESULT_OK)
{
String returnedData = data.getStringExtra("return_data");
Log.d("main_activity",returnedData);
}
break;
}
}
//子活動設(shè)置按鈕銷毀活動(return_button) ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button = findViewById(R.id.return_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("return_data","hello main_activity!");
setResult(RESULT_OK,intent);
finish(); //銷毀當(dāng)前活動;
}
});
}
@Override
//重寫按下返回鍵的方法,實現(xiàn)與 return_button 相同的功能;
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("return_data","hello back to main_activity!");
setResult(RESULT_OK,intent)
finish(); //銷毀當(dāng)前活動;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。