您好,登錄后才能下訂單哦!
Intent 是 Android 各組件之間進行交互的一種重要方式,一般被用于啟動活動、啟動服務以及發送廣播等場景。
顯式 Intent:
Intent 有多個構造函數重載,其中一個 Intent(Context packageContext,Class cls)。第一個參數要求提供一個啟動活動的上下文,第二個參數是指向想要啟動的目標活動。創建好 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 等信息,只有當action 和 category 信息完全匹配時才能成功啟動。
首先在 AndroidManifest.xml 中的 標簽下配置 內容,如下:
其中 標簽中指明活動可以響應 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 是另一個構造函數,直接將 action 的字符串傳了進去,表示想要啟動能夠響應 com.lodge.myapplication.ACTION_START 這個 action 的活動。另外,因為 category 參數設置為 android.intent.category.DEFAULT ,代表默認設置,所以在 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);
}
});
當然,在 AndroidManifest.xml 中 標簽下的 里也要添加 內容,如下:
更多隱式 intent:
使用隱式 intent 啟動其他程序的活動。例如打開系統瀏覽器,在按鈕點擊事件中添加如下代碼:
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 是內置動作。
向下一個活動傳遞數據:
Intent 中的 putExtra() 方法可以把我們想要傳遞的數據保存在 Intent 中,啟動另一個活動后,再把數據從 Intent 中取出即可。
//上一個活動傳送數據;
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); //傳遞數據,第一個參數是鍵值,后一個參數是要傳遞的數據;
startActivity(intent);
}
});
//下一個活動獲取數據;
@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"); //傳入相應鍵值,獲得數據;
Log.d("first_activity",data); //打印數據;
}無錫專業婦科醫院 http://www.xasgyy.net
返回數據給上一個活動:
Activity 中有一個 startActivityForResult() 方法也是用于啟動活動的,但是這個方法期望在活動銷毀的時候能夠返回一個結果給上一個活動。
//啟動活動;
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,second_activity.class);
startActivityForResult(intent,1); //接收啟動的下一個活動返回的數據,第二個參數是請求碼,只要是唯一值就行,這里是 1 ;
}
});
@Override
//重寫onActivityResult()方法,用于響應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;
}
}
//子活動設置按鈕銷毀活動(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(); //銷毀當前活動;
}
});
}
@Override
//重寫按下返回鍵的方法,實現與 return_button 相同的功能;
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("return_data","hello back to main_activity!");
setResult(RESULT_OK,intent)
finish(); //銷毀當前活動;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。