Android chapter12 intents 2

15 430 5
Android chapter12 intents 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

10/18/2011 1 Android 12-2 Intents Part2 Inter‐ProcessCommunicationUsingBundles VictorMatos ClevelandStateUniversity Notesarebasedon: AndroidDevelopers http://developer.android.com/index.html 12.Android–Intents–Part2 Intents AndroidIntents An activity usually presents a single visual user interface from which a number of An  activity usually  presents  a  single  visual  user  interface  from  which  a  number  of  actionscouldbeperformed. Movingfromoneactivitytoanotherisaccomplishedbyhavingthecurrent activitystartthenextonethroughsocalledintents. Intent {action + data} Activity ‐ 1 22 {action data} requestCode requestResult [optionaldata ] Activity ‐ 1 startActivityForResult … onActivityResult() … Activity‐2 onResult() … … 10/18/2011 2 12.Android–Intents–Part2 Intents AndroidBundles MostprogramminglanguagessupportthenotionofIPC metho d ‐calling with argumentsflowingbirectionallyfromthecallertotheinvokedmethod. Inandroidthecallingactivityissuesaninvocationtoanotheractivityusingan Intent object. NotablyinAndroid,thecallerdoesnotstopwaitingfor the called activity to return results Instead a listening 33 the  called  activity  to  return  results . Instead  a  list ening ‐ method[onActivityResult( )]shouldbeused. IPCInter‐ProcessCommunication 12.Android–Intents–Part2 Intents AndroidBundles NormallytheIPCexpressionsactualparameterlist,and formalparameterlist areusedtodesignatedthesignatureof particpatingarguments,andthecurrentlysupplieddata. Insteadofusingthetraditionalformal/actualparameterlists, AndroidreliesontheconceptofIntentstoestablishInter‐process‐ 44 communication. Intentsoptionallycarryanamedactuallistorbundle fo rdata exchange. 10/18/2011 3 12.Android–Intents–Part2 Intents AndroidBundles TheAndroidBundle containerisasimplemechanismusedtopassdatabetween activities. ABundle isatype‐safecollectionof <name,value> pairs. ThereisasetofputXXX andgetXXX methodstostoreandretrieve(singleand array)valuesofprimitivedatatypesfrom/tothebundles.Forexample 55 Bundle myBundle = new Bundle(); myBundle.putDouble ("var1", 3.1415); Double v1 = myBundle.getDouble("var1"); 12.Android–Intents–Part2 Intents AndroidIntents&Bundles Activit y 1:Sender Activit y 2:Receiver IntentmyIntentA1A2=newIntent(Activity1.this, Activity2.class); BundlemyBundle1=newBundle(); myBundle1.putInt("val1",123); myIntentA1A2.putExtras(myBundle1); startActivityForResult(myIntentA1A2,1122); y y INTENT requestCode ( 1122 ) Senderclass/Receiverclass 66 requestCode ( 1122 ) resultCode Extras:{val1=123 } 10/18/2011 4 12.Android–Intents–Part2 Intents AndroidIntents&Bundles Activit y 1:Sender Activit y 2:Receiver y y INTENT Cd ( 1122 ) Senderclass/Receiverclass IntentmyCallerIntent2=getIntent(); BundlemyBundle =myCallerIntent.getExtras(); int val1=myBundle.getInt("val1"); 77 request C o d e ( 1122 ) resultCode Extras:{val1=123 } 12.Android–Intents–Part2 Intents AndroidIntents&Bundles Activit y 1:Sender Activit y 2:Receiver y y INTENT Cd ( 1122 ) Senderclass/Receiverclass myBundle.putString("val1",456); myCallerIntent.putExtras(myBundle); setResult(Activity.RESULT_OK, myCallerIntent); 88 request C o d e ( 1122 ) resultCode (OK) Extras:{val1=456} 10/18/2011 5 12.Android–Intents–Part2 Intents AndroidBundlesAvailableat:http://developer.android.com/reference/android/os/Bundle.html Exam p le of Public Methods void clear() Removes all elements from the mapping of this Bundle. Object clone () Object clone () Clones the current Bundle. boolean containsKey(String key) Returns true if the given key is contained in the mapping of this Bundle. void putIntArray (String key, int[] value) Inserts an int array value into the mapping of this Bundle, replacing any existing value for the given key. void putString(String key, String value) Inserts a String value into the mapping of this Bundle, replacing any existing value for the given key. void putStringArray (String key, String[] value) Inserts a String array value into the mapping of this Bundle, replacing any 99 existing value for the given key. void putStringArrayList(String key, ArrayList<String> value) Inserts an ArrayList value into the mapping of this Bundle, replacing any existing value for the given key. void remove (String key) Removes any entry with the given key from the mapping of this Bundle. int size() Returns the number of mappings contained in this Bundle.  12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahange Activity1collectstwovaluesfromitsUIandcallsActivity2tocomputethe sumofthem.TheresultissentbackfromActivity2toActivity1. 1010 10/18/2011 6 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahange Step1. CreateGUIforActivity1(main1.xml) <?xmlversion="1.0"encoding="utf‐8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="Activity1" android:textSize="22sp" android:background =" #ff0000ff " android:background #ff0000ff  android:layout_width="fill_parent" android:layout_height="wrap_content"/> <EditText android:hint="Enterfirstvalue(asigneddouble)" android:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="numberDecimal|numberSigned|number"/> <EditText android:hint="Secondvalue(apositiveinteger)" android:id="@+id/EditText02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="number"/> <Button 1111 <Button  android:text="AddValues" android:id="@+id/btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:background="#ff0000ff" android:text="Sumis " android:textSize="28sp" android:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> Note.Theelementandroid:inputStyle indicatesthefirstvaluecouldbenumeric,with optionaldecimalsandsign. 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahange Step2. CreateGUIforActivity2(main2.xml) <?xmlversion="1.0"encoding="utf‐8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ff888888"> < TextView < TextView android:text="Activity2" android:textSize="22sp" android:background="#ff0000ff" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <EditText android:text="Datareveived " android:id="@+id/etDataReceived" android:layout_width="fill_parent" android:layout_height="wrap_content"/> <Button android:text="Done‐ Callback" android:id =" @+id/ btnDone " 1212 android:id @+id/ btnDone android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 10/18/2011 7 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahange Step3. Activity1.Afterclickingthebuttondata,fromUIisputinabundleandsentto Activity2.Alistenerremainsalertwaitingforresultstocomefromthecalledactivity. package cis493.matos.intent2b; //Activity1:gettwoinputvaluesfromuser,puttheminabumble.callActivity2toaddthetwonumbers,showresult import ; public class Activity1 extends Activity { public class Activity1  extends Activity  { EditText txtVal1; EditText txtVal2; TextView lblResult; ButtonbtnAdd; @Override public void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main1); txtVal1 =(EditText)findViewById(R.id.EditText01); txtVal2 =(EditText)findViewById(R.id.EditText02); lblResult =(TextView)findViewById(R.id.TextView01); btnAdd =(Button)findViewById(R.id.btnAdd); btnAdd.setOnClickListener(new OnClickListener(){ @Override public void onClick(Viewv){ //getvaluesfromtheUI Doublev1=Double.parseDouble(txtVal1.getText().toString()); Double v2 = Double. parseDouble ( txtVal2 .getText(). toString ()); 1313 Double  v2   Double. parseDouble ( txtVal2 .getText(). toString ()); //createintenttocallActivity2 IntentmyIntentA1A2=new Intent(Activity1.this, Activity2.class); //createacontainertoshipdata BundlemyData =new Bundle(); //add<key,value>dataitemstothecontainer myData.putDouble("val1",v1); myData.putDouble("val2",v2); //attachthecontainertotheintent myIntentA1A2.putExtras(myData); //callActivity2,tellyourlocallistenertowait forresponse startActivityForResult(myIntentA1A2,101); } }); }//onCreate 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahangecont. Step3.Activity1.Afterclickingthebuttondata,fromUIisputinabundleandsentto Activity2.Alistenerremainsalertwaitingforresultstocomefromthecalledactivity. ////////////////////////////////////////////////////////////////////////////// //locallistenerreceivingcallbacksfromotheractivities @Override protected void onActivityResult(int requestCode,int resultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); try { if ((requestCode ==101)&&(resultCode ==Activity.RESULT_OK)){ BundlemyResults =data.getExtras(); Doublevresult =myResults.getDouble("vresult"); lblResult.setText("Sumis" +vresult); } } catch (Exceptione){ lbl l ( "bl " d " " ld ) 1414 lbl Resu l t.setText ( " Pro bl ems‐ " +requestCo d e+ "  " +resu l tCo d e ) ; } }//onActivityResult }//Activity1 10/18/2011 8 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahangecont. Step4. Activity2.CalledfromActivity1.Extractsinputdatafromthebundleattachedto theintent.Performslocalcomputation.Addsresulttobundle.ReturnsOKsignal. package cis493.matos.intent2b; import ...; //returnsendinganOKsignaltocallingactivity setResult(Activity.RESULT_OK,myLocalIntent); //experiment:removecomment public class Activity2extends Activityimplements OnClickListener{ EditText dataReceived; ButtonbtnDone; @Override protected void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main2); dataReceived =(EditText)findViewById(R.id.etDataReceived); btnDone =(Button)findViewById(R.id.btnDone); btnDone.setOnClickListener(this); //pickcallmadetoActivity2viaIntent IntentmyLocalIntent =getIntent(); //lookintothebundlesenttoActivity2fordataitems BundlemyBundle =myLocalIntent.getExtras(); Double v1 = myBundle.getDouble ( " val1 " ); //finish(); }//onCreate @Override public void onClick(Viewv){ //closecurrentscreen‐ terminateActivity2 finish(); }//onClick }//Activity2 1515 Double  v1   myBundle.getDouble ( val1 ); Doublev2=myBundle.getDouble("val2"); //operateontheinputdata DoublevResult =v1+v2; //forillustrationpurposes.showdatareceived&result dataReceived.setText("Datareceivedis\n" +"val1=" +v1+"\nval2=" +v2 +"\n\nresult=" +vResult); //addtothebundlethecomputedresult myBundle.putDouble("vresult", vResult); //attachupdatedbumbletoinvokingintent myLocalIntent.putExtras(myBundle); 12.Android–Intents–Part2 Intents Tutorial1.ActivityExcahangecont. Step5. Updatetheapplication‘smanifest.Addnew<activity>tagfor“Activity2“ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cis493.matos.intent2b" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Activity1" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Activity2"> </activity> / add 1616 < / application> <uses-sdk android:minSdkVersion="4" /> </manifest> 10/18/2011 9 12.Android–Intents–Part2 Intents Tutorial2::Activity1invokesActivity2usinganIntent.Abundleconatingasetof differentdatatypes issentback‐and‐forthbetweenbothactivities (see12IntentDemo3.zip). Thisexampleissimilartoprevious. Youmaywanttoskipit. 1717 //Activity1:Invokingauser‐definedsub‐activitysendingandreceivingresultsfromthesub‐activity package cis493.intents3; 12.Android–Intents–Part2 Intents Tutorial2:Activity1invokesActivity2usinganIntent.Abundleconatingasetof differentdatatypes issentback‐and‐forthbetweenbothactivities (see12IntentDemo3.zip). import ...; public class Activity1extends Activity{ TextView label1; TextView label1Returned; ButtonbtnCallActivity2; //arbitraryinterprocess communicationID(justanickname !) private final int IPC_ID =(int)(10001*Math.random()); @Override public void onCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); try { setContentView(R.layout.main); lbl1 ( TtVi ) fi dVi B Id (R id lbl1 ) l a b e l1 = ( T ex tVi ew )  fi n dVi ew B y Id (R . id . l a b e l1 ) ; label1Returned =(TextView)findViewById(R.id.label1Returned); btnCallActivity2 =(Button)findViewById(R.id.btnCallActivity2); btnCallActivity2.setOnClickListener(new Clicker1()); //fordemonstrationpurposes‐ showintoplabel label1.setText("Activity1(sending )\n\n" +"RequestCode ID:" +IPC_ID +"\n" +"myString1:HelloAndroid" +"\n" +"myDouble1:3.141592" +"\n" +"myIntArray:{123}"); }catch (Exceptione){ Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG ).show(); } }//onCreate 1818 10/18/2011 10 private class Clicker1implements OnClickListener { public void onClick(Viewv){ try { 12.Android–Intents–Part2 Intents Tutorial2:Activity1invokesActivity2usinganIntent.Abundleconatingasetof differentdatatypes issentback‐and‐forthbetweenbothactivities (see12IntentDemo3.zip). //createanIntenttotalktoActivit y2 IntentmyIntentA1A2=new Intent(Activity1.this, Activity2.class); //prepareaBundleandaddthedatapiecestobesent BundlemyData =new Bundle(); myData.putInt("myRequestCode",IPC_ID); myData.putString("myString1","HelloAndroid"); myData.putDouble("myDouble1",3.141592); int []myLittleArray ={1,2,3}; myData.putIntArray("myIntArray1",myLittleArray); //bindthe BundleandtheIntentthattalkstoActivity2 myIntentA1A2.putExtras(myData); //callActivity2andwaitforresults startActivityForResult(myIntentA1A2,I PC_ID); }catch (Exceptione){ Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG).show(); } }//onClick }//Clicker1 1919 @Override protected void onActivityResult(int requestCode,int resultCode,Intentdata){ super.onActivityResult(requestCode,resultCode,data); { 12.Android–Intents–Part2 Intents Tutorial2:Activity1invokesActivity2usinganIntent.Abundleconatingasetof differentdatatypes issentback‐and‐forthbetweenbothactivities (see12IntentDemo3.zip). try { //checkthattheseresultsareforus if (IPC_ID ==requestCode){ //Activity2isover‐ seewhathappened if (resultCode ==Activity.RESULT_OK){ //good‐ wehavesomedatasentbackfromActivity2 BundlemyReturnedData =data.getExtras(); StringmyReturnedString1=myReturnedData.getString("myReturnedString1"); DoublemyReturnedDouble1=myReturnedData.getDouble("myReturnedDouble1"); StringmyReturnedString2=myReturnedData.getString("myCurrentTime"); //displayin thebottomlabel label1Returned.setText( "requestCode:" +requestCode +"\n" +"resultCode:" + resultCode +"\n" +"returnedString1:" +myReturnedString1+"\n" +"returnedDouble:" + Double.toString(myReturnedDouble1)+"\n" +"returnedString2:" +myReturnedString2); }else { //userpressedtheBACKbutton label1.setText("SelectionCANCELLED!"); }//if } }catch (Exceptione){ Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_LONG).show(); }//try }//onActivityResult }//AndroIntent1 2020 [...]... android: id="@+id/btnCallActivity2" android: id="@+id/caption1" android: layout_width="149px" android: layout_width="fill_parent" android: layout_height="wrap_content" android: layout_height="wrap_content" android: text="Call  Activity2" android: background="#ffff3300" android: textStyle="bold" android: padding="4sp" android: padding="6sp" android: text=" Activity1 " > android: textSize 20 px android: textSize= "20 px" android: textStyle="bold"... xmlns :android= "http://schemas .android. com/apk/res /android"   android: background="#ff555555">

Ngày đăng: 16/03/2014, 23:38

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan