中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

發布時間:2020-04-07 06:05:41 來源:網絡 閱讀:389 作者:nineteens 欄目:移動開發

  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(); //銷毀當前活動;

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

策勒县| 浙江省| 五大连池市| 石泉县| 西吉县| 越西县| 光山县| 高邮市| 石嘴山市| 始兴县| 勃利县| 凉山| 江津市| 滦南县| 安陆市| 无极县| 福清市| 盐城市| 纳雍县| 图木舒克市| 长宁区| 万年县| 河源市| 阳朔县| 阆中市| 合川市| 彭州市| 应城市| 定远县| 连云港市| 绥中县| 西城区| 柏乡县| 阿瓦提县| 民勤县| 泸州市| 确山县| 栾城县| 错那县| 湖州市| 宿松县|