一、用Log列印日誌 二、Toast用法 三、在活動中使用Menu 首先在res目錄下新建menu文件夾,接著在這個文件夾下新建一個名叫main的菜單文件,在main.xml中添加如下代碼 回到Activity中重寫onCreateOptionsMenu()方法,編寫如下代碼(返回true表示允許創 ...
一、用Log列印日誌
Log.d("HelloWorldActivity", "onCreate execute");
二、Toast用法
Toast.makeText(MainActivity.this, "You Clicked Button", Toast.LENGTH_SHORT).show();
三、在活動中使用Menu
首先在res目錄下新建menu文件夾,接著在這個文件夾下新建一個名叫main的菜單文件,在main.xml中添加如下代碼
<item android:id="@+id/add_item" android:title="Add" /> <item android:id="@+id/remove_item" android:title="Remove" />
回到Activity中重寫onCreateOptionsMenu()方法,編寫如下代碼(返回true表示允許創建的菜單顯示出來)
getMenuInflater().inflate(R.menu.main, menu); return true;
還要定義菜單響應事件,在Activity中重寫onOptionsItemSelected()方法,編寫代碼如下
switch (item.getItemId()){ case R.id.add_item: Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast,makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show(); break; default: } return true;
四、銷毀一個活動
finish();
五、使用顯示Intent
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivity(intent);
六、使用隱式Intent
通過在SecondActivity的<activity>標簽下配置<intent-filter>的內容,可以指定當前活動能夠響應的action和category,打開AndroidManifest.xml,添加如下代碼
<intent-filter> <action android:name="com.example.activitytest.ACTION_START" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
在FirstActivity中
Intent intent = new Intent("com.example.activitytest.ACTION_STAART");
intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent);
七、更多隱式Intent的用法
調用系統撥號界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086")); startActivity(intent);
八、向下一個活動傳遞數據
String data = "Hello SecondActivity" Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("extra_data", data);
在SecondActivity中將傳遞的數據取出,並列印出來
Intent intent = getIntent(); String data = intent.getStringExtra("extra_data"); Log.d("SecondActivity", data);
九、返回數據給上一個活動
startActivityForResult()方法(第一個參數還是Intent,第二個參數是請求碼,用於在之後的回調中判斷數據的來源)來啟動SecondActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); startActivityForResult(intent, 1);
在SecondActivity中給按鈕註冊點擊事件,並添加返回數據的邏輯(setResult()方法用於向上一個活動返回處理數據。第一個參數用於向上一個活動返回處理結果,一般只使用RESULT_OK或RESULT_CANCELED,第二個參數則把帶有數據的Intent傳遞迴去)
Intent intent = new Intent(); intent.putExtra("data_return", Hello FirstActivity); setResult(RESULT_OK, intent); finish();
由於是使用startActivityForResult()方法來啟動SecondActivity的,在SecondActivity被銷毀之後會回調上一個會動的onActivityResult()方法,因此需要在FirstActivity中重寫這個方法來得到返回的數據
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode) { case 1: if (resultCode == RESULT_OK) { String returnData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnData); } break; default: } }
還可以通過Back鍵回到FirstActivity並得到返回數據(重寫onBackPressed()方法)
public void onBackPressed(){ Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }
十、活動的啟動模式
在實際項目中我們應該根據特定的需求為每個活動指定恰當的啟動模式。啟動模式一共有4種,分別是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通過給<activity>標簽指定android:launchMode屬性來選擇啟動模式(返回棧中存在多少實例,就需要連按多少次Back鍵才嫩退出程式)
1、standard是活動預設的啟動模式,對於使用standard模式的活動,系統不會在乎這個活動是否已經在返回棧中 存在,每次啟動都會創建該活動的一個新的實例
2、當活動的啟動模式指定為singleTop,在啟動活動時如果發現返回棧的棧頂已經是該活動,則認為可以直接使用它,不會再創建新的活動實例。不過當活動並未處於棧頂位置時,這時再啟動該活動,還是會創建新的實例的
3、當活動的啟動模式指定為singleTask,每次啟動該活動時系統首先會在返回棧中檢查是否存在該活動的實例,如果發現已經存在則直接使用該實例,並把在這個活動之上的所有活動統統出棧,如果沒有發現就會創建一個新的活動實例
4、指定為singleInstance模式的活動會啟用一個新的返回棧來管理這個活動
十一、隨時隨地退出程式
如果我們的程式需要一個註銷或者退出的功能,那麼就會用到如下方案,只需要用一個專門的集合類對所有的活動進行管理就可以了,代碼如下
public class ActivityCollector { public static List<Activity> activities = new ArrayList<>(); public static void addActivity(Activity activity){ activities.add(activity); } public static void removeActivity(Actuvuty activity){ activities.remove(activity); } public static void finishAll(){ for (Activity activity : activities) { if (!activity.isFinishing()) { activity.finish(); } } activities.clear(); } }
接下來修改BaseActivity中的代碼,在onCreate()方法中調用了ActivityCollector的addActivity()方法,表明將當前正在創建的活動添加到活動管理器里(ActivityCollector.addActivity(this);)。然後重寫了onDestroy()方法,並調用了ActivityCollector的removeActivity()方法,表明將一個馬上要銷毀的活動從活動管理器里移除(ActivityCollector.removeActivity(this);)。之後不管在什麼地方退出程式,只需要調用ActivityCollector.finishAll()方法就可以了