2012年2月5日 星期日

[TQC+ Android] 1-4 計算BMI值 From Activity to another , and back. Use startActivityForResult





在輸入性別 , 身高及體重後 , 按下計算按鈕 , 在Activity 中運用Intent傳遞資訊並啟動另一個Activity , 並計算BMI值 , 這題重點在兩個Activity的資料傳遞 , 記得要在AndroidManifest.xml 宣告另一支Activity, 以下是程式碼。


package COM.TQC.GDD01;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;

public class GDD01 extends Activity 
{
  private EditText etheight , etweight;
  private RadioButton rb1 , rb2; 
  final int RequestCode = 0;
    
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.main);
    
    etheight = (EditText) findViewById(R.id.editText1);
    etweight = (EditText) findViewById(R.id.editText2);
    
    rb1 = (RadioButton) findViewById(R.id.radioButton1);
    rb1.setChecked(true);
    
    rb2 = (RadioButton) findViewById(R.id.radioButton2);
    
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {       
       Bundle bundle = new Bundle();
       if(rb1.isChecked()) bundle.putString("Sex", "M");
       else bundle.putString("Sex", "F");
       bundle.putDouble("height", Double.parseDouble(etheight.getText().toString()));
       bundle.putDouble("weight", Double.parseDouble(etweight.getText().toString()));
          
       Intent intent = new Intent();
       intent.setClass(GDD01.this, GDD01_child.class);
       intent.putExtras(bundle);
       GDD01.this.startActivityForResult(intent, RequestCode);
       
     /*
           從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給 child_Activity 後作計算       
                           這些附加在 Intent 上的訊息都儲存在 Bundle 物件中    
          透過「intent.putExtras(bundle)」敘述,將「bundle」 物件附加在 Intent 上,
          隨著 Intent 送出而送出
     */
     
      }
    });
  } 
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    switch (resultCode)
    { 
      case RESULT_OK:
    
        Bundle bundle = data.getExtras();
        String Sex = bundle.getString("Sex");
        double height = bundle.getDouble("height");
        double weight = bundle.getDouble("weight");
        
        etheight.setText("" + height);
        etweight.setText("" + weight);
        if(Sex.equals("M"))
        {
          rb1.setChecked(true);
        }else
        {
          rb2.setChecked(true);
        }
        break;       
      
      default: 
        break; 
     } 
   } 
}

另一個Activity

package COM.TQC.GDD01 ;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GDD01_child extends Activity 
{
  Bundle bundle;
  Intent intent; 
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);    
    setContentView(R.layout.mylayout);
    
    intent=this.getIntent();
    bundle = intent.getExtras();    
   
    String Sex = bundle.getString("Sex");
    double height = bundle.getDouble("height");
    double weight = bundle.getDouble("weight");
      
    
    String BMI_result = this.getBMI(height,weight);
    String BMI_advice = this.getAdvice(Sex,height,weight);
    
    TextView tvBMI = (TextView) findViewById(R.id.tvBMI);
    tvBMI.setText("BMI 結果" + BMI_result);
    TextView tvAdvice = (TextView) findViewById(R.id.tvAdvice);
    tvAdvice.setText(BMI_advice);    
  
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {          
      
       GDD01_child.this.setResult(RESULT_OK, intent);
       GDD01_child.this.finish();
      }
    }); 
    
  }
  
  //BMI值格式化
  private String format(double num)
  {
      NumberFormat NF = new DecimalFormat(".##");
   return NF.format(num);
   
  }
  //取得BMI值
  private String getBMI (double height, double weight)
  {
   double BMI = weight / Math.pow(height, 2);
   return format(BMI);
  }
  //依BMI值取得建議
  private String getAdvice (String Sex, double height, double weight)
  {
  double doubleBMI = Double.parseDouble(getBMI(height,weight));
  String Advice;
  
  if(Sex.equals("m"))
   {
    if(doubleBMI>25) Advice = (String) getText(R.string.advice_heavy);
    else if(doubleBMI<20) Advice = (String) getText(R.string.advice_light);
    else Advice = (String) getText(R.string.advice_average);
   }
   else
   {
    if(doubleBMI>22) Advice = (String) getText(R.string.advice_heavy);
    else if(doubleBMI<18) Advice = (String) getText(R.string.advice_light);
    else Advice = (String) getText(R.string.advice_average);    
   } 
  
  return Advice;  
  }
  
}

main.xml


      
      
      
     
      
      

mylayout.xml
    
    
    
    
  


最後是AndroidManifest.xml

    
        
            
                
                
            
        
        
    
    



P.S. 題目中所要求的Variable和Method皆會保留 , 也會根據題目所要求的流程去實作 , 縱使題目要求繞遠路....



[TQC+ Android] 1-3 點餐系統 Use AlertDialog



按下進入點餐系統的Button時 , 跳出AlertDialog呈現菜單列表 , 每樣餐點旁並有CheckBox提供勾選並可再次修改 , 這題在測驗對AlertDialog的使用 , 和AlertDialog.Builder 中 setMultiChoiceItems() 的使用

setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)

items陣列內的Text內容會條列出現在AlertDialog中 , Text旁邊會出現Check , 而Check會根據checkeditems陣列的內容值來決定是否被預先選取 , 然後傳入listener做為多重選取的事件 , 以下是程式碼。


package COM.TQC.GDD01;


import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GDD01 extends Activity
{
  private Button button1;
  private TextView text1;
  private String[] s1 = {"美味蟹堡","義式香腸堡","蔬菜水果堡","香蕉潛艇堡","香烤雞肉堡"};
  
  AlertDialog.Builder AB;
  boolean[] checkState = new boolean[5];  
  
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    button1 = (Button) findViewById(R.id.button1);
    text1 = (TextView) findViewById(R.id.text1);
    
    AB = new AlertDialog.Builder(this);
    AB.setTitle(R.string.str2);
    AB.setPositiveButton("確認", DOnClickListener);
    AB.setNegativeButton("離開", DOnClickListener);
    AB.setMultiChoiceItems(s1, checkState , DOnMultiChoiceClickListener);
    
    button1.setOnClickListener(new Button.OnClickListener()
    {      
     @Override
      public void onClick(View v)
      {      
      AB.show();
      }
    });
  }
  
  DialogInterface.OnMultiChoiceClickListener DOnMultiChoiceClickListener = new DialogInterface.OnMultiChoiceClickListener()
  {
 @Override
 public void onClick(DialogInterface dialog, int which, boolean isChecked)
 {  
  // AlertDialog.Builder 會同步更新 checkState陣列的值
 }   
  };
  
  DialogInterface.OnClickListener DOnClickListener = new DialogInterface.OnClickListener()
  {   
 @Override
 public void onClick(DialogInterface dialog, int which)
 {
  // TODO Auto-generated method stub
  switch(which)
  {
   case DialogInterface.BUTTON_POSITIVE:    
    checkFood();
    break;
   
   case DialogInterface.BUTTON_NEGATIVE:    
    break;
  }
 }

 private void checkFood()
 {
  // TODO Auto-generated method stub    
  text1.setText(R.string.str2);
  for(int i=0 ; i< checkState.length ; i++)
  {
   if(checkState[i]) text1.append("\n" + s1[i]);   
  }  
 }
   
  };
}


接下來是main.xml


  
  





P.S. 題目中所要求的Variable和Method皆會保留 , 也會根據題目所要求的流程去實作 , 縱使題目要求繞遠路....


[TQC+ Android] 1-2 電費計算機 Use Spinner




在選擇伏特 , 輸入安培及輸入每天使用時數與每度電費後 , 按下寄算電器每月電費按鈕後即可在下方顯示金額 , 並可依模擬器語系變更程式語系 , 這題要測驗的是Android多國語系的設定 , 也就是values資料夾的命名 , values-en 和 values-zh , 將中英文介面中所要顯示的文字分別宣告在兩個資料夾內的string.xml中 , 再來就是 RelativeLayout的配置  , 以下是程式碼。





package COM.TQC.GDD01;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;


public class GDD01 extends Activity
{
    /** Called when the activity is first created. */

 @Override
    public void onCreate(Bundle savedInstanceState)
 {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        MyOutcome = (TextView) this.findViewById(R.id.respond);
        
        input_a = (EditText) this.findViewById(R.id.input_a);
        input_hr = (EditText) this.findViewById(R.id.input_hr);
        input_m = (EditText) this.findViewById(R.id.input_m);
        
        submit = (Button) this.findViewById(R.id.submit);
        submit.setOnClickListener(BOnClickListener);
        
        sp = (Spinner) this.findViewById(R.id.input_v);         
        ArrayAdapter adpAdapter = ArrayAdapter.createFromResource(this, R.array.option_vs , android.R.layout.simple_spinner_item);
        adpAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        sp.setAdapter(adpAdapter); 
        sp.setOnItemSelectedListener(SOnItemSelectedListener);        
    }
    
    TextView MyOutcome;
    EditText input_a , input_hr , input_m;
    Spinner sp;
    Button submit;
    int volt , sum;
    final int VOLT_110v = 0 , VOLT_220v = 1;    
    
    public Button.OnClickListener BOnClickListener = new Button.OnClickListener()
    {
     
  @Override
  public void onClick(View v)
  {
   // TODO Auto-generated method stub
   int ampere = Integer.parseInt(input_a.getText().toString());
   int hour = Integer.parseInt(input_hr.getText().toString());
   int month = Integer.parseInt(input_m.getText().toString());
      
   sum = (int) (volt * ampere / 1000 * hour * 30 * month);
   MyOutcome.setText("$ "+sum);   
  }     
    };
    
    public Spinner.OnItemSelectedListener SOnItemSelectedListener = new Spinner.OnItemSelectedListener()
    {
  @Override
  public void onItemSelected(AdapterView arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   switch(arg2)
   {
     case VOLT_110v:      
      volt = 110;
      break;
     case VOLT_220v:
      volt = 220;
      break;
   }   
  }

  @Override
  public void onNothingSelected(AdapterView arg0) {

   // TODO Auto-generated method stub   

  }     

    };

}

再來是 main.xml



    

        

        

        

        

        

        

        

        

        

        



P.S. 題目中所要求的Variable和Method皆會保留 , 也會根據題目所要求的流程去實作 , 縱使題目要求繞遠路....



[TQC+ Android] 1-1 整存整付記算機 A calculating machine





設計一個計算機應用程式 , 在輸入本金和年利率與存款期數 , 按下計算本利和的按鈕 , 級會在下方顯示本利和 , 後這題很容易 , 考驗Layout的設定而已 , 以下是程式碼。


package COM.TQC.GDD01;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class GDD01 extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        amount = (TextView) this.findViewById(R.id.amount);        
        
        input_lend = (EditText) this.findViewById(R.id.input_lend);
        input_rate = (EditText) this.findViewById(R.id.input_rate);
        input_number = (EditText) this.findViewById(R.id.input_number);        
        submit = (Button) this.findViewById(R.id.submit);
        
        submit.setOnClickListener(BOnClickListener);
      
    }    
    
    TextView amount;
    EditText input_lend , input_rate , input_number;
    Button submit;
    
    public Button.OnClickListener BOnClickListener = new Button.OnClickListener()
    {       
     @Override
  public void onClick(View v)
  {
   // TODO Auto-generated method stub
      int lend = Integer.parseInt(input_lend.getText().toString());
      int number = Integer.parseInt(input_number.getText().toString());
      double MonthRate = Double.parseDouble(input_rate.getText().toString())/ 12 / 100;
            
      int sum = (int) (lend * Math.pow(MonthRate + 1 , number));
   
      amount.setText("本利和為:"+sum);   
  }     
    };    
}

接下來是 main Layout

    
    
    
    
    
    
    
    







P.S. 題目中所要求的Variable和Method皆會保留 , 也會根據題目所要求的流程去實作 , 縱使題目要求繞遠路....





2012年2月1日 星期三

[雜談] 你在外島當參一嗎? (人事行政士)







一般來說軍中許多學長流傳這麼一句話 , 平時不接參一 , 戰時不接參二三 , 打死不接參四 , 為什麼這麼說呢? 其實軍中的各參級業務平常負責處理許多不同的文書工作 , 對外要負責應付上層的幕僚長官 , 對內要應付許多裝檢任務還有弟兄的權益問題 , 所以許多時候參級業務的工作量和壓力並不比帶兵的士官們來的小 , 熬夜加班趕業務 , 回到寢室看到大家都睡著的情況是相當常見的。


而是否擔任參級業務通常是下部隊之後長官挑選和指派的 , 因為要處理文書業務還會操作到電腦 , 所以一般來說都是找大專以上的人來擔任 , 這部分我倒覺得只要肯學的話學歷是沒啥關係的 , 最重要的還是態度和細心程度  , 參一主管人事:假  調職  晉陞  退伍  福利 從年頭忙到年尾 , 一般來說連上不會設置參二業務 , 參三主管訓練:製作課表 送訓 下基地或是有演訓任務的話才會忙 , 參四主管後勤:裝備 , 經理 , 伙食相關 平常雜事不少 , 另外高裝檢會特忙


從上面看來業務士從頭忙到尾平常業務真的很操 很賽 很雜 , 所以有事先打聽過的弟兄都不會想接參級業務 , 特 別 是 參 一 !! 通常可以選擇的話很多人都會拒絕 , 但是有時候軍令如山長官要你接就是接了 , 難道可以SAY NO嗎? 這個時候就皮繃緊一點做好這份業務吧....除了被指派當參一 , 當你籤條上面寫的是人事行政之類的話 , 極大的可能下部隊就是參一業務了 , 唯一的例外情況就是....部隊已經有不少人在接這個業務了 , 所以你有可能就是掛這個軍職而做別的事情 , 不過發生這種情況的機率很小....


在本島和外島同樣的業務所要包辦和處理的事情多少會不同 , 因為我是在外島擔任營參一所以文章的介紹也著重在這部分 , 當籤條是抽到外島心情就很差了沒想到還是當參一 , 或許心情又更差了(其實人事行政相關的籤只會出現在資料處理的預士和預官抽籤得時候 , 普通的義務役抽籤應該不會抽到這個職缺 , 所以要不要當參一這個決定其實你自己就能選擇避開他 , 知道參一很操還去考的話 , 那能怪誰呢? 不過通常學歷要是比同儕出色的話下部隊通常也是被挑去當參級業務....如果還被選到就真的是命) , 或許你也不用太怨嘆 , 因為在外島當參一還是有好處的 , 我就看到有人當得很開心 , 當然普遍來說還是常常在抱怨 哈


之前提到過參一的業務是管人事的 , 俗話說有人就有事 , 所以跟人相關的許多雜事大家第一個就想到參一 , 所以參一的業務又雜又多 , 一整年都在忙 , 尤其是當要處理志願役年度考績的時候更是忙呀....這些很雜的業務坦白說當我全部都上手和做過之後也快要退伍了 , 很多時候遇到沒處理過的業務也是見招拆招和問人囉 , 當參一常常會遇到下面的情況。


你會常常需要和長官接觸 , 你有許多公文需要給長官會辦 , 上至指揮部幕僚下至連上幹部 , 連上幹部比較好處理大家都熟了而且你也是幫連上的弟兄們服務所以通常是不會被刁難的 , 接下來的關卡就是營部 , 你在連級擔任文書上面還有營級的話公文的會辦就另外需要他們的章 , 他們好不好搞就牽扯到很多因素 , 包含本身個性 當下心情 你所屬的連隊黑不黑 你老闆黑不黑都有關係 , 一般的情況下連參一的公文和資料到這邊就OK了 , 剩下交給人事官去處理吧 , 所以和你的人事官打好關係吧 , 他算是你業務上的老闆。


另外還有一個人和你的業務是息息相關的 , 他就是營參一 , 營參一??? 簡單來說他就是在營級幫人事官處理文書和雜事的業務士 , 人事官不在的時候通常也是營參一幫他處理業務 , 所以和他打好關係之後要處理事情都會比較好辦些。當然有時候還要去指揮部找更高階的長官 , 而且甚至是別的科組的長官 , 不過這種情況不多就是了 , 簡單來說你的那些上頭對口決定你接這個業務平常的心情是好是壞....


有時候被罵被幹是免不了的 , 這個時候就訓練你的抗壓性和EQ管理能力了....所以你是個火爆浪子不能被罵的話是不適合接這種業務的 , 甚至不適合當兵......哈 , 不過沒有事是絕對的 , 都有好有壞 , 那當參一有甚麼好處呢? 雖然說屎事不少但是也真的有好處的~


之前提到說你的業務和弟兄的權益和福利是相當有關係的 , 舉幾個例子來說:最重要的就是放假嘛~ 而且在外島返台假是累積起來放的 , 所以久久一次的返台假是那麼的重要又珍貴的 , 因為不像本島幾乎每個禮拜都放假 ,  所以你當然會希望返台假的日期是你想要的 ,  而參一的其中一項職責就是排假 , 所以參一的其中一個好處就是假是自己排的 ,  而且其他弟兄也會因為想喬假而對你特別好 , 此外長官還有弟兄都常常會詢問你問題和你要資料 , 或請你幫忙解決問題 , 所以一個不出包處理能力強的參一是很有趴數的 , 和這類福利權益相關的業務還真多和參一有關係 , 既然你的業務內容真的是重要又特別 , 所以相對你的權力也很大....我相信因為這樣連上的弟兄會對你不錯 , 很少人想拿自己的福利來開玩笑 , 甚至是一種畏懼的關係 , 所以有句話叫參一大十梯 , 這句話相信你下部隊之後就會有體認了(前提是你業務不會出包又能幫弟兄解決問題)。


另外如果你不喜歡跟部隊操課 , 不喜歡做戶外的雜事 , 不喜歡時間一到被抓去跑步運動的話 , 那這種負責室內文書的業務士是正投你意的 , 有時候加班還可以報補休 , 隔天早上就不用跟著部隊起來早點名 , 這也是有人為什麼一下部隊就想接業務的其中原因了。


當參一也可以學到不少人際互動的應對進退 , 畢竟人就是你的業務 , 對上要和長官建立良好的互動 , 對內要幫連上的弟兄處理難題 , 要怎麼讓大家對你建立起信任度這些都是可以在出社會之前好好學習的部分。


題外話如果你擔任營參一呢? 這個職務其實蠻單純的 , 彙整營內參一繳上來的資料 , 幫人事官處理一些雜事 , 幫營級長官跑跑假單 , 真的比較難的部分就是人事官休假的時候你要暫代他的職務 , 不然平常的工作內容也是蠻單純的。




講到這邊希望你對這個職務有大致上的瞭解 , 不過各單位的處事風格都不太一樣 , 實際情況還是要下部隊才瞭解 , 祝你好運了 , 甚麼都是假的 平安退伍才是真的!!!!









相關文章:



Google Analytics