- 從A intent 到 B時:
One onPause->
Two onCreate->Two onStart->Two onResume->
One onStop - 當B按返回鍵至A時:
Two onPause->
One onRestart->One onStart->One onResume->
Two onStop->Two onDestroy
2012年10月22日 星期一
Intent時二個畫面的生命週期
從Activity A Intent到Activity B時,二個畫面的生命周期以下自己做個紀錄。
2012年8月27日 星期一
點擊map上的標記時變更圖案
在map上點擊某個標記時,想讓該標記變更圖示,以便使用者辨別目前點選的項目,可以使用以下作法。
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
//Get the new Drawable
Drawable marker = mContext.getResources().getDrawable(R.drawable.icon);
//Set its bounds
marker.setBounds(0,0,marker.getIntrinsicWidth(),marker.getIntrinsicHeight());
//Set the new marker
item.setMarker(marker);
//Return true! Do not invalidate
return true;
}
但如果你在ItemizedOverlay<OverlayItem>裡面原先是將Drawable設置為super(boundCenterBottom(defaultMarker))的話,會發現點擊後雖然變色了但是圖示移位了,這時在setBounds的地方必須設置以下(也就是boundCenterBottom的意思)
int dWidth = drawable.getIntrinsicWidth();
int dHeight = drawable.getIntrinsicHeight();
marker.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
做到這裡發現如果點擊下一個marker,上一個marker沒有變回來,我自己使用以下方式
OverlayItem item = items.get(arg0);
Drawable marker = context.getResources().getDrawable(R.drawable.map_pin);
Drawable markers = context.getResources().getDrawable(R.drawable.map_pins);
int dWidth = marker.getIntrinsicWidth();
int dHeight = marker.getIntrinsicHeight();
marker.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
markers.setBounds(-dWidth / 2, -dHeight, dWidth / 2, 0);
//如果點擊的跟之前點擊的物件不同,恢復上一支旗標的顏色,變更目前點選旗標顏色
if(arg0!=itemPotiion){
//恢復上一支旗標的顏色
if(itemPotiion!=-1){
OverlayItem before_item = items.get(itemPotiion);
before_item.setMarker(marker);
}
//變更目前旗標顏色
item.setMarker(markers);
}
itemPotiion=arg0;//記錄點選的項目
參考網址:
http://pastebin.com/eAhEHssQ
http://stackoverflow.com/questions/7038636/how-to-change-the-marker-for-the-overlay-on-tap-for-android
2012年8月15日 星期三
使用try偵測EditText的值是否為數字
如果我想偵測某個EditText是否為全部數字且要在0~100間的話要怎麼做呢?設定EditText輸入的格式後,當然我知道大家都會說這很簡單阿,但分享一下我覺得很聰明的方式。
如果輸入的不是數字,那麼在Double.parseDouble時會錯誤,則會跳到catch 去顯示Dialog,不符合0~100時,也會到catch 去顯示Dialog,這樣程式碼真簡潔。
try顯示的Dialog的方法
{
first_rate = Double.parseDouble(rate1.getText().toString());
if (first_rate < 0 || first_rate > 100)
{
throw new Exception();
}
}
catch (Exception ex)
{
ShowDialog("錯誤","格式錯誤, 請輸入 0 ~ 100 之間的數字");
}
private void ShowDialog(String title,String msg)
{
AlertDialog.Builder builder = new Builder(getActivity());
builder.setTitle(title);
builder.setMessage(msg);
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
Dialog noticeDialog = builder.create();
noticeDialog.show();
}
2012年8月12日 星期日
Java單例模式(可以減少Andoroid記憶體使用量)
如果有個類別常常使用,那要使用時都必須再new出一個類別,但如果一龐大起來,也許會造成資源不必要的浪費,或許善用static是一個方法,如下:
後續還有一堆很深的意義可以去思考,例如假設有個需求,假設某些資源取得頻繁時,我們可以去定義一個靜態的Map當作資料快取,要取得資料時:
看完王者歸來-品味 Java 的 21 種設計模式後,自己紀錄的心得。
public class Singleton { //3.建立一個靜態的類別,直接在這邊建立只會一次。 private static Singleton instance=new Singleton(); //1.私有化建構方法,這樣就不能new出本類別。 private Singleton(){ } //2.定義一個方法堤供用戶端產生好的實例 public static Singleton getInstance(){ return instance; } public int getCount(int x,int y){ return x+y; } }
public class Client { /** * @param args */ public static void main(String[] args) { Singleton aa=Singleton.getInstance(); System.out.println(aa.toString()); Singleton bb=Singleton.getInstance(); System.out.println(bb.toString()); System.out.println(aa.getCount(5, 5)); } }這樣一來,你會發現System.out.println(aa.toString())跟bb時,他們的記憶體位置是一樣的,這樣能夠有效減少記憶體使用量。
後續還有一堆很深的意義可以去思考,例如假設有個需求,假設某些資源取得頻繁時,我們可以去定義一個靜態的Map當作資料快取,要取得資料時:
(1)檢查map記憶體位置中是否有資料,如果有直接使用map記憶體裡面得資料值。
(2)如果記憶體位置中沒有值,我們可以從服務器或sqlite去取得資料,取得完後再存入map記憶體中以便下次使用。
這讓我想到在Android上使用google map時,一移動地圖就要從服務器撈取大量座標要標註在地圖上的時候,是不是也能夠使用此邏輯去增加再次顯示的速度?
看完王者歸來-品味 Java 的 21 種設計模式後,自己紀錄的心得。
2012年7月29日 星期日
不重複開啟Activity的方法
在有好多Activity中,Intent過來又intent過去常常會開好多重複的Activity,今天我發現了很好用的方法,就是加上以下這行
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
這樣就可以激活OnStop狀態的Activity囉
2012年7月20日 星期五
Android 保持螢幕清醒不休眠
Android 禁止系統休眠,使屏幕不變暗,保持遊戲中屏幕高亮
實現這一功能的方法有兩種,一種是在Manifest.xml文件裡面聲明,一種是在代碼裡面修改LayoutParams的標誌位。具體如下:
1、在Manifest.xml文件裡面用user-permission聲明。代碼如下:
1、在Manifest.xml文件裡面用user-permission聲明。代碼如下:
- <uses-permission android:name="android.permission.WAKE_LOCK">
- </uses-permission>
這種方法,在安裝apk時,系統會提示安裝人是否允許使用禁止休眠功能。
2、在程序中用代碼實現。代碼如下:
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
把這段代碼加在setContentView(R.layout.main)之前即可
這種方法,安裝時,不會提示安裝人是否允許使用禁止休眠功能
2012年6月3日 星期日
在ListView中使用CheckBox
在ListView上如果加入Checkbox,在滑動時會發現明明只有打勾一個,下滑時卻有好多個被打勾,這時就必須使用BaseAdapter這個類別來自定ListView,先來釐清幾個重點再看範例會比較清楚。
最後附上源碼,包含ListView點擊後變色。
點左上角File的Download就可以下載
下載
//創建一個類別專門用來記錄每一列checkbox的狀態 class check_msg { boolean ischeck; public check_msg(boolean ischeck,String text){ this.ischeck=ischeck; } }
//宣告一個list陣列儲存的是check_msg 這個列別的狀態 ArrayListlist2 = new ArrayList ();
//用一個迴圈設定每一列的check初始狀態 list2.add(new check_msg(false));
//當checkbox狀態被點擊時變更狀態。 final check_msg msg = list2.get(arg0); viewHolder.cb1.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub msg.ischeck=!msg.ischeck; } });
最後附上源碼,包含ListView點擊後變色。
點左上角File的Download就可以下載
下載
訂閱:
文章 (Atom)
星期、月份英文縮寫
中文 英文 3字母 縮寫 3字母 縮寫 2字母 縮寫 2字母 縮寫 1字母 縮寫 1字母 縮寫 其他 縮寫 星期日 Sunday SUN Sun SU Su S S 星期一 Monday MON Mon MO Mo M M 星期二 Tuesday TUE Tue TU ...
-
要把經緯度店址可以使用以下作法 Geocoder gc = new Geocoder(getActivity(), Locale.TRADITIONAL_CHINESE); List<Address> lstAddress = gc.getFromLocation...
-
在官方的範例中有以下做法 http://developer.android.com/training/basics/fragments/communicating.html //左側Fragment public class MainLeftFragment extend...
-
Android 禁止系統休眠,使屏幕不變暗,保持遊戲中屏幕高亮 實現這一功能的方法有兩種,一種是在Manifest.xml文件裡面聲明,一種是在代碼裡面修改LayoutParams的標誌位。具體如下: 1、在Manifest.xml文件裡面用user-permission...