[Android] Intent的初步使用

當一個Application中有使用到多個Activity時,進行Activity之間的切換需使用Intent,本篇文章將初步介紹Intent之使用方法與Activity之間的data傳輸。

 

下圖為Android官方提供之Activity的Lifecycle流程圖,在Activity之間的切換可參考下圖之流程圖,來決定在不同區塊時所要執行之功能。如有兩個Activity為 Activity1與Activity2,Activity1為Main Activity,當從Activity1切到Activity2時,又想從Activity2切回Activity1時,使用return鈕與使用Intent的方式返回Activity1的動作區塊是不一樣的! 如有興趣的朋友可在各自區塊加入Log觀察其Lifecycle之動作。
State diagram for an Android Activity Lifecycle.

下面開始將示範初步Intent的使用方法,為一個圓面積與周長之計算功能,在Activity1輸入半徑,並傳入到Activity2進行計算並使之顯示在TextView上。如下圖所示分別為Activity1與Activity2之介面。

在一個project建立另一Activity名為CircleArea,其layout.xml也會同時新增

當layout.xml內的TextView與Button擺件擺好與分配好ID後,便開始以下程式的撰寫。

 

首先是MainActivity內的撰寫,所需的功能除了從MainActivity切換到CircleArea外,也將MainActivity EditView內的值傳入到CircleArea內

        radet=(EditText)findViewById(R.id.radetID);
        calculatebtn=(Button)findViewById(R.id.calculatebtnID);
        calculatebtn.setOnClickListener(new btnclicklistener());

 將各控件ID綁定後,接著是Button function內的撰寫,當點擊Button後將進行以下動作

class btnclicklistener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            try{
                double rad=Integer.parseInt(radet.getText().toString()); //將EditView內的值存到rad

                Intent intent1=new Intent(MainActivity.this,CircleArea.class); //建立一個intent
                intent1.putExtra("rad",rad);
                startActivity(intent1);
            }
            catch (Exception e){
                Toast.makeText(MainActivity.this,"請輸入半徑",Toast.LENGTH_LONG).show();
            }

        }

一開始將EditView內的值存到rad內,接著建立一個intent1,其後面有兩個參數分別為Context與Class,第一個Context為本Activity之頁面,第二個Class為所要切換到的Activity頁面。接著再將rad存到putExtra()函數內,以讓CircleArea可取得rad值,其putExtra()之兩個參數String name 與double value,其第一個參數為一個辨別字串,當別的Activity需取用此值時,也需輸入此辨別名。

接著再使用startActivity()方法,進行Activity切換動作,以上為MainActivity內的撰寫,接著以下是CricleArea的程式撰寫。

 circumferencetv=(TextView)findViewById(R.id.circumferencetvID);
 areatv=(TextView)findViewById(R.id.areatvID);

一開始一樣綁定layout的ID後,便開始將取出MainActivity所存到intent內的值與進行計算。

 protected void onResume(){
        super.onResume();

        double rad2=getIntent().getDoubleExtra("rad",0);
        double circumference= rad2*pi*2;
        double area=rad2*rad2*pi;

        circumferencetv.setText("周長:"+circumference);
        areatv.setText("面積:"+area);
    }

其取出方式為getIntent().getDoubleExtra(),其兩個參數為Srting name與 double defultvalue,第一個參數為所需取出參數的辨別名,第二個參數為一個defult值,當取不到String name這個傳入值時,將以defultvalue代替,取出值後便可開始計算圓周長與圓面積,再將其計算結果分別顯示在TextView上。