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聲明。代碼如下:
  • <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,先來釐清幾個重點再看範例會比較清楚。


//創建一個類別專門用來記錄每一列checkbox的狀態
 class check_msg {
  boolean ischeck;
  
  
  public check_msg(boolean ischeck,String text){
   this.ischeck=ischeck;
 
  }
  
 }


//宣告一個list陣列儲存的是check_msg 這個列別的狀態
ArrayList list2 = 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就可以下載
下載

2012年5月12日 星期六

在Fragment使用DialogFragments

今天在http://android-developers.blogspot.com/2012/05/using-dialogfragments.html上看到使用DialogFragments才知道原來要在fragment的畫面上呈現一個Dialog這麼簡單,但網路上可以查到的資料好像還是相當少,附上簡單的實作DialogFragments連結,一看就懂了。

先附上官網的效果圖...













點左上角File的Download就可以下載囉
DialogFragments範例下載

2012年5月4日 星期五

Android Sqlite 開關問題


一直以來使用Sqlite開關方面,一直出現問題譬如以下錯誤畫面
05-04 14:14:50.870: E/AndroidRuntime(7173): java.lang.IllegalStateException: database /data/data/etwarm.namespace/databases/Super_data.db (conn# 0) already closed

close() was never explicitly called on database

等等等...........

這類的錯誤(close訊息)都只是上個db沒有關閉又開了一次,譬如開了一次getReadableDatabase()又再開了一次getReadableDatabase(),這樣在DDMS就會看到錯誤訊息,雖然不至於影響整個應用程序,但看到錯誤訊息心理就不是很舒服。

個人在程序上的方式如下,自己筆記一下。


//這個應用程序有使用2個db,先在最上頭宣告為null值
private DBOpenHelper dbHelper=null;
private Customer_DBOpenHelper customer_dbHelper=null;
SQLiteDatabase db=null;


 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

 //宣告
 dbHelper = new DBOpenHelper(this);
 customer_dbHelper = new Customer_DBOpenHelper(this);


}



//使用2個public,當dbHelper開時,customer_dbHelper就關,customer_dbHelper要開時dbHelper就關
public void db_help_open(){
  if(customer_dbHelper!=null){customer_dbHelper.close();}
  db = dbHelper.getReadableDatabase();
 }      
 
public void customer_db_help_open(){
  if(dbHelper!=null){dbHelper.close();}
  db = customer_dbHelper.getReadableDatabase();
 }




//當離開畫面時呼叫all_cursor_db_close()這個自己寫的方法
public void onPause() {
  // TODO Auto-generated method stub
  all_cursor_db_close();
  super.onPause();
 }

//把他全部關閉
public void all_cursor_db_close(){
 if(cursor!=null){cursor=null;}
 if(customer_dbHelper != null){customer_dbHelper.close();}
 if(dbHelper != null){dbHelper.close();}
}

如果各位有更好的做法及建議,歡迎各位共同討論!!

2012年5月1日 星期二

Index -1 requested, with a size of 1的問題原因


今天在使用Sqlite的cursor時出現以下錯誤訊息

05-02 02:54:56.928: E/AndroidRuntime(1660): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

再來看一下官方文件

public abstract int getColumnIndex (String columnName)

Since: API Level 1
Returns the zero-based index for the given column name, or -1 if the column doesn't exist. If you expect the column to exist use getColumnIndexOrThrow(String) instead, which will make the error more clear.

他說到當某個欄位不存在時( -1 if the column doesn't exist),就會回傳-1,所以有可能是搜尋語句的欄位名稱打錯,但我又很清楚我欄位名稱有打對,結果我發現是因為沒有執行cursor.moveToNext()這一行,導致cursor的游標在資料位置的第一列的前面,所以會發生找不到資料返回-1的結果,自己的解決方式如下

if(cursor.getCount()>0)  
{
   while(cursor.moveToNext())
    {
 String test=cursor.getString(cursor.getColumnIndex("customer_want"));
 Log.i("Tag","這是cursor取得的值:"+test.toString());
    }
}

2012年4月30日 星期一

Failure delivering result ResultInfo問題原因


使用返回按鍵回上個Activity時遇到了以下錯誤。

Failure delivering result ResultInfo{who=android:fragment:2, request=0, result=0, data=null} to activity {etwarm.namespace/etwarm.buy.fragment.buy_home_main}: java.lang.NullPointerException

我們從錯誤訊息可以觀察到data=null所以錯誤了,那data在哪呢?其實就是返回的那個Activity有使用到onActivityResult,只要判斷一下data這個是否為空即可,如if(data!=null ),請參考以下。

 
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  //把勾選要自訂的物件回傳
  super.onActivityResult(requestCode, resultCode, data);
  if(data!=null ){
  if(requestCode == SELECT_OJ_CODE)
  {
   
   String select_oj_id=data.getStringExtra("SELECT_OJ");
   if(!select_oj_id.equals("")){
   Log.i("Tag", select_oj_id.toString());
   dao.update_want(table_name, test_tmp, select_oj_id);
   }  
  }
  }
 }

星期、月份英文縮寫

中文 英文 3字母 縮寫 3字母 縮寫 2字母 縮寫 2字母 縮寫 1字母 縮寫 1字母 縮寫 其他 縮寫 星期日 Sunday SUN Sun SU Su S S 星期一 Monday MON Mon MO Mo M M 星期二 Tuesday TUE Tue TU ...