android小知识之意图(intent)
android中的意圖有顯示意圖和隱式意圖兩種,
顯示意圖要求必須知道被激活組件的包和class
隱式意圖只需要知道跳轉activity的動作和數據,就可以激活對應的組件
A 主activity? B 接收跳轉的activity
步驟
1:在主配置文件中聲明B 至少要聲明一個android:name屬性
[html]?
<activity?
?????????? android:name=".DemoActivity"?
?????????? android:label="@string/demoActivity" >?
?????????? <intent-filter>?
???????????????<!-- 隱士意圖中標記自己的action-->?
???????????<action name="action"/>
???????????????<category android:name="android.intent.category.DEFAULT"/>
?????????????? <!-- 隱士意圖中指定intent的名字 自己定義 可匹配多項 -->?
?????????????? <action android:name="com.itcast.intent.DemoActivity" />?
?????????????? <!-- 隱式intent需要指定的activity的類型,可自己定義該值,需要在調用的時候相對應不寫該項默認為 android.intent.category.DEFAULT,可匹配多項 -->?
?????????????? <category android:name="android.intent.category.DEFAULT" />?
?????????????? <!-- 指定傳想該activity數值的類型 和主機,如果指定該項,就必須在跳轉activity的時候傳入還數據和主機名 -->?
?????????????? <data?
?????????????????? android:host="cn.itcast.demo"?
?????????????????? android:scheme="itcast" />?
?????????? </intent-filter>?
?????? </activity>?
?
?2:在A的布局文件中一個textview和button,并添加點擊事件
[html]?
<TextView?
?????? android:layout_width="wrap_content"?
?????? android:layout_height="wrap_content"?
?????? android:text="第一個activity" />?
?
?? <Button?
?????? android:id="@+id/button"?
?????? android:layout_width="wrap_content"?
?????? android:layout_height="wrap_content"?
?????? android:onClick="open"?
?????? android:text="跳轉" />?
3:點擊事件觸發的集中intent意圖
[java]?
/**
???? * 意圖,描述一個動作,激活一個組件,使用其他的activity需要現在主文件中配置activity的名字等屬性
???? * intent 要去做一件事
???? *?
???? * @param view
???? */?
??? public void open(View view) {?
??????? /**
???????? * 方法一
???????? */?
??????? Intent intent1 = new Intent();?
??????? // 1.是當前的包名,2跳轉activity的類名,一定要加上包名?=
??????? intent1.setClassName("com.itcast.intent", "com.itcast.intent.DemoActivity");?
??????? // startActivity(intent1);?
??????? /**
???????? * 方法二
???????? */?
??????? Intent intent2 = new Intent(this, DemoActivity.class);?
??????? // startActivity(intent2);?
??????? /**
???????? * 方法三
???????? */?
??????? Intent intent3 = new Intent();?
??????? ComponentName component = new ComponentName("com.itcast.intent", "com.itcast.intent.DemoActivity");?
??????? intent3.setComponent(component);?
??????? // startActivity(intent3);?
??????? /**
???????? * 上面三種方法要求必須知道被激活組件的包和class,稱為顯示意圖
???????? */?
??????? // ******************************************************************//?
??????? /**
???????? * 隱式意圖只需要知道跳轉activity的動作和數據,就可以激活對應的組件<br>
???????? * 如果要激活另外程序的組件
???????? */?
??????? Intent intent = new Intent();?
??????? intent.setAction("action");?
??????? // 不管在主配置文件中有沒有聲明跳轉activity的category,都要寫該項,不然報錯找到activity,不些有系統會以默認的類型?
??????? intent.addCategory("android.intent.category.DEFAULT");?
??????? // 如果在聲明activity的時候指定了data屬性,在跳轉的時候就一定要設置他的data屬性值,和配置的屬性值相等,不然也會報找不到的錯誤?
??????? intent.setData(Uri.parse("itcast://cn.itcast.demo"));?
??????? // startActivity(intent);?
??????? Intent imageIntent = new Intent();?
??????? imageIntent.setAction(Intent.ACTION_PICK);?
??????? imageIntent.setType("image/*");// 設置數據類型?
??????? startActivity(imageIntent);?
??? }?
DemoActivity 不需要做任何事,只要繼承activity,并重寫他的oncreate方法就可以了,這個例子只是測試activity的跳轉的幾個方法
?
下面記錄下個人對startactivityforresult(intent)的理解:
主要是跳轉到同一個類卻要做不同處理的時候用.startActivityForResult(intent, int);前面的intent指要跳轉的類名,后面的數字是多少由自己定義,用這個方法由A類跳轉到B類的話,B類做完要做的事情后只要這樣寫:
Intent intent=new Intent();
setResult(1, intent);//這個1也是自己定義,只要自己清楚它代表的含義.
finish();
然后在A類重寫protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
}這個方法,第一個參數就是上面的A類傳過去的int,第二個是B類返回的1,(可以是任意數字),第三個參數是B類的intent,只要判斷data不為空,即是B類返回后調用的這個方法.此時可以根據前兩個參數的不同情況做不同處理.
?
轉載于:https://www.cnblogs.com/ws5861/p/3463721.html
總結
以上是生活随笔為你收集整理的android小知识之意图(intent)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核编译和运行
- 下一篇: 使用.Net图表开发工具JDash.Ne