小白带你学安卓——Intent
生活随笔
收集整理的這篇文章主要介紹了
小白带你学安卓——Intent
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于Intent來說,我們之前也簡單的接觸到一些。它的作用也十分的明顯,用于傳遞一些數據;其實,它還有另一個用途,描述你想要干的事情,是Android四大組件(Activity,Service,BroadcastReciver,ContentProvider)之間的紐帶。這兩個關鍵的作用,我就帶著大家一一進行講解,方便大家的理解。
1.Activity之間傳遞數據:
a.傳遞基本數據類型/Stringb.傳遞Bundle(底層實現是Map)c.傳遞自定義對象(序列化)Serializable和Parcelable接口都可以實現 對 對象的序列化和反序列化Serializable接口是java提供的接口,它的序列化和反序列化是基于磁盤的,效率相對較低 (不可以跨進程通訊 )Parcelable接口是Android提供的接口,它的序列化和反序列化是基于內存的,效率要比Serializable要高。推薦使用。(跨進程通訊)注意:Parcelable序列化的時候,write屬性的順序必須和read的順序一致簡單的說,我們一般用到的在Activity之間傳遞數據無非就以上三種。接下來給大家看一下示例代碼,方便大家的理解。(這里不再給出XML文件的代碼,大家可以自行敲一下,因為只是一些簡單的布局,就沒有必要再浪費大家的時間)(1)MainActivity.java
import java.io.Serializable; import java.util.ArrayList; import java.util.Map;import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener;public class MainActivity extends Activity implements OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//事件監聽findViewById(R.id.button1).setOnClickListener(this);findViewById(R.id.button2).setOnClickListener(this);findViewById(R.id.button3).setOnClickListener(this);findViewById(R.id.button4).setOnClickListener(this);findViewById(R.id.button5).setOnClickListener(this);findViewById(R.id.button6).setOnClickListener(this);}@Overridepublic void onClick(View v){Intent intent = new Intent(this, SecondActivity.class);switch (v.getId()){//基本數據類型/Stringcase R.id.button1://數據 /** 參一:類似于Map中的key,到跳轉的界面后,通過此key將value取出來*/intent.putExtra("name", "張三");intent.putExtra("age", 20);break;//傳遞Bundlecase R.id.button2:/** Bundle:底層封裝的是Map,對HashMap進一步封裝,使用起來更加方便*/Bundle extras = new Bundle();extras.putString("name", "李四");extras.putInt("age", 18);intent.putExtras(extras);//傳遞數組case R.id.button3:intent.putExtra("animals", new String[]{"Dog","Cat","Pig"});break;//傳遞自定義對象(Person)Serializablecase R.id.button4:intent.putExtra("person", new Person("小明", 12));break;//傳遞自定義對象(Student)Parcelablecase R.id.button5:/** Serializable和Parcelable接口都可以實現 對 對象的序列化和反序列化* Serializable接口是java提供的接口,它的序列化和反序列化是基于磁盤的,效率相對較低* Parcelable接口是Android提供的接口,它的序列化和反序列化是基于內存的,效率要比Serializable要高。推薦使用。*/intent.putExtra("student", new Student("小亮", 15));break;case R.id.button6:ArrayList<Student> list = new ArrayList<Student>();list.add(new Student("小李", 20));list.add(new Student("小鄧", 22));intent.putParcelableArrayListExtra("list", list);break;}startActivity(intent);}}//實現 Parcelable class Student implements Parcelable {private String name;private int age;public Student(String name, int age){super();this.name = name;this.age = age;}public int describeContents() {return 0;}//將數據寫入Parcelpublic void writeToParcel(Parcel out, int flags) {out.writeString(name);out.writeInt(age);}public static final Parcelable.Creator<Student> CREATOR= new Parcelable.Creator<Student>() {public Student createFromParcel(Parcel in) {return new Student(in);}public Student[] newArray(int size) {return new Student[size];}};//從Parcel讀取數據private Student(Parcel in) {name = in.readString();age = in.readInt();}@Overridepublic String toString(){return this.name+" "+this.age;} }//Serializable:序列化接口 接口是在定義一種規范 class Person implements Serializable {private String name;private int age;public Person(String name, int age){super();this.name = name;this.age = age;}@Overridepublic String toString(){return this.name+" "+this.age;} }(2)SecondActivity.java
import java.util.ArrayList; import java.util.Arrays;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView;public class SecondActivity extends Activity {TextView mTvShow;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);mTvShow = (TextView) findViewById(R.id.tv_show);//取上個界面傳過來的數據//哪個Intent啟動的此Activity,這個方法返回的就是這個IntentIntent intent=getIntent();/** 傳遞基本數據類型 String name = intent.getStringExtra("name");int age = intent.getIntExtra("age", 0);mTvShow.setText("name:"+name+" age:"+age);*//* * 傳遞Bundle數據* Bundle bdl = intent.getExtras();String name = bdl.getString("name");int age = bdl.getInt("age");mTvShow.setText("name:"+name+" age:"+age);*//* * 傳遞數組數據* String[] animals = intent.getStringArrayExtra("animals");mTvShow.setText("animals:"+Arrays.toString(animals));*//** 傳遞對象數據 Serializable* Person person=(Person) intent.getSerializableExtra("person");mTvShow.setText("person:"+person.toString());*//* * 傳遞對象數據 Parcelable* Student student=intent.getParcelableExtra("student");mTvShow.setText("person:"+student.toString());*///Parcelable類型的集合數據ArrayList<Student> list = intent.getParcelableArrayListExtra("list");mTvShow.setText("list:"+list.toString());}} 上面很多都是我自己打了注釋的,大家在參考代碼的時候,可以把注釋放開。以上呢,就是我理解的傳遞數據的一些知識點的整理。2.Intent隱式意圖:
對于顯式意圖來說,大家理解起來肯定很容易,我貼一小段代碼,大家看后就理解了: a.顯示意圖:用于啟當前應用中的其它組件Intent intent = new Intent(this, Other1Activity.class);startActivity(intent);b.隱式意圖:意圖過濾器---可以用于同一個應用或者不同應用之間??赡苓@個概念大家不是很了解,那我現在帶著大家慢慢的去看一下隱式意圖到底是什么東東,其實在剛剛開始的時候,我對其理解也不是很透徹,但是看了一下網上的代碼和書,也是逐漸明白了其原理。接下來,我用我的大白話給大家講述一下:如果你有一個組件希望別的應用程序可以調用,你就應該給你這個組件配置一個intent-filter<intent-filter><action android:name="com.tz.go1"/><category android:name="android.intent.category.DEFAULT"/></intent-filter>intent-filter:包含兩部分 1,目的【action】---->你要到哪里去2,內容【category+data】----》去的路上要帶什么 區分性的數據和內容性的數據可以認為就在Action的基礎上增加了過濾條件I.action+category默認category (android.intent.category.DEFAULT)必須配置,你也可以添加自己的。II.action+category+data(增加了一個過濾條件)<dataandroid:scheme="sun"android:host="www.sun.com"android:path="/mypath"/>URI:統一資源標識 組成跟URL基本一樣Uri:sun://www.sun.com/shuyiURL:網址,統一資源定位符http://www.baidu.com/index.htmlhttp:// ----scheme 協議www.baidu.com ---host 主機地址index.html ----path 路徑III.action+category+data+mimeType(增加了一個過濾條件)<data android:scheme="myscheme" android:mimeType="image/*"/>但是這里有一個問題要大家注意一下:當data和mimeType同時存在時,不要單獨通過setData或setType方法進行設置,需要使用setDataAndType進行設置。至于這里的代碼,我寫的不是很全,大家可以去網上搜一搜,代碼還是很多的~不好意思啦!總結
以上是生活随笔為你收集整理的小白带你学安卓——Intent的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript招式总结
- 下一篇: Stata:一文读懂事件研究法Event