溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android技巧:003使用Intent連接多個活動

發(fā)布時間:2020-04-07 06:05:41 來源:網(wǎng)絡(luò) 閱讀:380 作者:nineteens 欄目:移動開發(fā)

  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)前活動;

向AI問一下細(xì)節(jié)

免責(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)容。

AI