Android基礎08-Intent及其七大屬性及intent-filter

一、知識點回顧:Activity

(一)、如何實現Activity頁面跳轉?

示例代碼:

//第一種方式:

Intent?intent = new Intent(MainActivity.this,NextActivity.class);

????????startActivity(intent);

//第二種方式:

Intent?intent = new Intent();

?intent.setClass(MainActivity.this, NextActivity.class);

startActivity(intent);

//其實還有很多種Intent實現頁面跳轉的寫法。


二、Intent對象介紹:

(一)、Intent基本介紹:

1、Intent 用于封裝程序的”調用意圖“。兩個Activity之間,可以把需要交換的數據封裝成Bundle對象,然后使用Intent攜帶Bundle對象,實現兩個Activity之間的數據交換;

2、Intent還是各種應用程序組件之間通信的重要媒介。不管想啟動一個Acitivity、Service還是BroadcastReceiver,Android均使用統一的Intent對象來封裝這種”啟動意圖“。很明顯使用Intent提供了一致的編程模型;

3、Intent還有一個好處,如果應用程序只是想啟動具有某種特征的組件,并不想和某個具體的組件耦合,則可以通過在intent-filter中配置相應的屬性進行處理,與stucts2中的MVC框架思路類似。

4、Intent對象大致包括7大屬性:ComponentName、 ?Action?、?Category?、?Data ?、Type、 ?Extra??、Flag。

(二)、Intent啟動不同組件的方法:

1、啟動Activity:

startActivity()

startActivtyForResult()

2、啟動Service:【后面詳細講】

ComponetName ??startService()

boolean ? ?bindService()

3、啟動BroadcastReceiver:【后面詳細講】

sendBroadcast()

sendOrderedBroadcast?()

sendStickyBroadcast()

sendStickyOrderedBroadcast()


三、Intent的七大屬性:

Intent對象大致包括7大屬性:ComponentName、 ?Action 、 Category 、 Data ?、Type、 ?Extra ?、Flags。

Action作為標識符,代表一個Intent,當一個Activity需要外部協助處理時,就會發出一個Intent,如果一個程序能完成相應功能,只要在intent-filter加上這個這個intent就可以了。

Data保存需要傳遞的數據格式,比如:tel://

Extras保存需要傳遞的額外數據。

Category表示Intent的種類,從android上啟動Activity有多種方式,比如 程序列表、桌面圖標、點擊Home激活的桌面等等,Category則用來標識這些Activity的圖標會出現在哪些啟動的上下文環境里。

(一)、ComponentName屬性:

1、指定了ComponentName屬性的Intent已經明確了它將要啟動哪個組件,因此這種Intent被稱為顯式Intent,沒有指定ComponentName屬性的Intent被稱為隱式Intent。隱式Intent沒有明確要啟動哪個組件,應用會根據Intent指定的規則去啟動符合條件的組件。

2、示例代碼:

Intent intent = new Intent();

ComponentName cName = new ComponentName(MainActivity.this,NextActivity.class);

intent.setComponent(cName);

startActivity(intent);

//實際上,以上的寫法都被簡化為以下寫法:

Intent?intent = new Intent(MainActivity.this,NextActivity.class);

????????startActivity(intent);

//也就是說,平時我們最常用的Intent頁面跳轉的寫法就調用的是顯式Intent。

此外,ComponentName屬性可以實現一個app跳轉到另一個app。

Intent intent = new Intent();

? ?ComponentName cName = new ComponentName(

"com.steven.testasyncloader.sqlitedata","com.steven.testasyncloader.sqlitedata.MainActivity");

//其中兩個參數的含義:第一個是要跳轉到的app的包名,第二個參數是該包中的要跳轉到app的頁面的class

? ?intent.setComponent(cName);

? ?startActivity(intent);

(二)、Action、Category屬性與intent-filter配置:

????????通常,Action、Category屬性結合使用,定義這兩個屬性都是在配置文件的節點中。Intent通過定義Action屬性(其實就是一段自定義的字符串),這樣就可以把Intent與具體的某個Activity分離,實現了解耦。否則,每次跳轉,都要寫成類似new Intent(MainActivity.this,NextActivity.class)這樣的形式,也就是說必須將要跳轉的目標Activity的名字寫出來,這樣的編碼其實是“硬編碼”,并沒有實現松耦合。調用Intent對象的setAction()方法實現頁面跳轉雖然略微復雜(需要在AndroidManifest.xml文件中配置),但是實現了解耦。

1、示例代碼:

Intent intent = new Intent();

intent.setAction("com.steven.android06lifecycle.nextactivity");

startActivity(intent);

//在配置文件中注冊Activity的時候需要聲明:

//當某個頁面是默認啟動頁面時,需要定義Action、Category的屬性必須為以下字符串:【設置任務入口】





2、常用Action屬性常量:

????? ? Intent對象不僅可以啟動本應用內的程序組件,也可以啟動Android系統的其他應用的組件,包括系統內置的程序組件(需要設置權限)。

? ACTION_MAIN:(android.intent.action.MAIN)Android程序入口。

每個Android應用必須且只能包含一個此類型的Action聲明。【如果設置多個,則哪個在前,執行哪個。】

? ACTION_VIEW: (android.intent.action.VIEW)?顯示指定數據。

? ACTION_EDIT: (android.intent.action.EDIT)?編輯指定數據。

? ACTION_DIAL: (android.intent.action.DIAL)?顯示撥號面板。

? ACTION_CALL: (android.intent.action.CALL)?直接呼叫Data中所帶的號碼。

? ACTION_ANSWER: (android.intent.action.ANSWER)?接聽來電。

? ACTION_SEND: (android.intent.action.SEND)?向其他人發送數據(例如:彩信/email)。

? ACTION_SENDTO:? (android.intent.action.SENDTO)?向其他人發送短信。

? ACTION_SEARCH: (android.intent.action.SEARCH)?執行搜索。

? ACTION_GET_CONTENT: (android.intent.action.GET_CONTENT)?讓用戶選擇數據,并返回所選數據。

(三)、Category 屬性:

????? ?Category屬性為Action增加額外的附加類別信息。CATEGORY_LAUNCHER意味著在加載程序的時候Acticity出現在最上面,而CATEGORY_HOME表示頁面跳轉到HOME界面。

1、實現頁面跳轉到HOME界面的代碼:【記憶】

Intent intent = new Intent();

intent.setAction(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGOTY_HOME);

startActivity(intent);

2、常用Category屬性常量:

?? CATEGORY_DEFAULT: (android.intent.category.DEFAULT)?Android系統中默認的執行方式,按照普通Activity的執行方式執行。

? CATEGORY_HOME: (android.intent.category.HOME)?設置該組件為Home Activity。

? CATEGORY_PREFERENCE: (android.intent.category.PREFERENCE)?設置該組件為Preference。

? CATEGORY_LAUNCHER: (android.intent.category.LAUNCHER)?設置該組件為在當前應用程序啟動器中優先級最高的Activity,通常與入口ACTION_MAIN配合使用。

? CATEGORY_BROWSABLE: (android.intent.category.BROWSABLE)?設置該組件可以使用瀏覽器啟動。

(四)、Data屬性:

? 1、Data屬性通常用于向Action屬性提供操作的數據。Data屬性的值是個Uri對象。

????? ??Uri的格式如下:scheme://host:port/path

? ? 2、系統內置的幾個Data屬性常量:


tel://:號碼數據格式,后跟電話號碼。


mailto://:郵件數據格式,后跟郵件收件人地址。


smsto://:短息數據格式,后跟短信接收號碼。


content://:內容數據格式,后跟需要讀取的內容。


file://:文件數據格式,后跟文件路徑。


market://search?q=pname:pkgname:市場數據格式,在Google Market里搜索包名為pkgname的應用。


geo://latitude, longitude:經緯數據格式,在地圖上顯示經緯度所指定的位置。

????3、Intent利用Action屬性和Data屬性啟動Android系統內置組件的代碼:【不需要記憶,用到的時候查找資料】

(一)、撥打電話:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_CALL);

//intent.setAction("android.intent.action.CALL"); ?//以下各項皆如此,都有兩種寫法。

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

//調用撥號面板:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

//調用撥號面板:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(Uri.parse("tel:1320010001"));

startActivity(intent);

(二)、利用Uri打開瀏覽器、打開地圖等:

Uri uri = Uri.parse("http://www.google.com"); //瀏覽器

Uri uri=Uri.parse("geo:39.899533,116.036476"); //打開地圖定位

Intent intent = new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setData(uri);

startActivity(intent);

(五)、Type屬性:

????1、Type屬性用于指定Data所指定的Uri對應的MIME類型。MIME只要符合“abc/xyz”這樣的字符串格式即可。

? ? 2、?Intent利用Action、Data和Type屬性啟動Android系統內置組件的代碼:

(三)、播放視頻:

Intent intent = new Intent();

Uri uri = Uri.parse("file:///sdcard/media.mp4");

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(uri, "video/*");

startActivity(intent);

(六)、Extra屬性:

????1、通過intent.putExtra(鍵, 值)的形式在多個Activity之間進行數據交換。

? ? 2、系統內置的幾個Extra常量:

? EXTRA_BCC:存放郵件密送人地址的字符串數組。

? EXTRA_CC:存放郵件抄送人地址的字符串數組。

? EXTRA_EMAIL:存放郵件地址的字符串數組。

? EXTRA_SUBJECT:存放郵件主題字符串。

? EXTRA_TEXT:存放郵件內容。

? EXTRA_KEY_EVENT:以KeyEvent對象方式存放觸發Intent的按鍵。

? EXTRA_PHONE_NUMBER:存放調用ACTION_CALL時的電話號碼。

? ? 3、?Intent利用Action、Data和Type、Extra屬性啟動Android系統內置組件的代碼:

(四)、調用發送短信的程序

Intent? intent??= new Intent();

intent.setAction(Intent.ACTION_VIEW);

intent.setType("vnd.android-dir/mms-sms");

intent.putExtra("sms_body", "信息內容...");

startActivity(intent);

//發送短信息

Uri uri = Uri.parse("smsto:13200100001");

Intent? intent??= new Intent();

intent.setAction(Intent.??ACTION_SENDTO?);

intent.setData(uri);

intent.putExtra("sms_body", "信息內容...");

startActivity( intent?);

//發送彩信,設備會提示選擇合適的程序發送

Uri uri = Uri.parse("content://media/external/images/media/23"); //設備中的資源(圖像或其他資源)

Intent intent = new Intent();

intent.setAction(Intent.??ACTION_SEND?);

intent.setType("image/png");

intent.putExtra("sms_body", "內容");

intent.putExtra(Intent.EXTRA_STREAM, uri);

startActivity(it);

(五)、發送Email:

Intent intent=new Intent();

intent.setAction(Intent.??ACTION_SEND?);

String[] tos={"android1@163.com"};

String[] ccs={"you@yahoo.com"};

intent.putExtra(Intent.EXTRA_EMAIL, tos);

intent.putExtra(Intent.EXTRA_CC, ccs);

intent.putExtra(Intent.EXTRA_TEXT, "The email body text");

intent.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");

intent.setType("message/rfc822");

startActivity(Intent.createChooser(intent, "Choose Email Client"));

? ? Intent intent = new Intent(Intent.ACTION_SEND);

? ? String[] tos = { "mobileservice@ablesky.com" };

? ? intent.putExtra(Intent.EXTRA_EMAIL, tos);

? ? intent.putExtra(Intent.EXTRA_TEXT, getPhoneParameter());

? ? intent.putExtra(Intent.EXTRA_SUBJECT, "Android日志");

? ? intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cacheDir));

? ? intent.setType("message/rfc882");

? ? intent.setType("plain/text");

? ? Intent.createChooser(intent, "請選擇郵件發送軟件");

? ? startActivity(intent);

intent.setAction(android.provider.Settings.ACTION_SETTINGS);

?4、?Intent利用Action屬性中的ACTION_GET_CONTENT獲取返回值:

//選擇圖片 requestCode 返回的標識

Intent intent = new Intent();

intent.setAction(Intent.?ACTION_GET_CONTENT?);

intent.setType( "image/*"?);

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperIntent, requestCode);

//添加音頻

Intent intent = new Intent();

intent.setAction(Intent.?ACTION_GET_CONTENT?);

intent.setType( "video/*"?);

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperIntent, requestCode);

//視頻

Intent intent = new Intent();

intent.setAction(Intent.?ACTION_GET_CONTENT?);

intent.setType( "video/*"?);

Intent wrapperIntent = Intent.createChooser(intent, null);

startActivityForResult(wrapperIntent, requestCode);

//錄音

Intent intent = new Intent();

intent.setAction(Intent.?ACTION_GET_CONTENT?);

intent.setType( "audio/amr"?);

intent.setClassName("com.android.soundrecorder","com.android.soundrecorder.SoundRecorder");

startActivityForResult(intent, requestCode);

(七)、Flags屬性:Intent可調用addFlags()方法來為Intent添加控制標記。【重要】

????1、FLAG_ACTIVITY_CLEAR_TOP:(效果同Activity ?LaunchMode的singleTask)

????????如果在棧中已經有該Activity的實例,就重用該實例。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。

? ? 2、FLAG_ACTIVITY_SINGLE_TOP:(效果同Activity ?LaunchMode的singleTop)

????????如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,而不會創建新的Activity對象。

????3、FLAG_ACTIVITY_NEW_TASK:?(效果類似Activity ?LaunchMode的singleInstance)

【備注:】以下幾個為了解。

? ? 4、FLAG_ACTIVITY_MULTIPLE_TASK:

????5、FLAG_ACTIVITY_BROUGHT_TO_FRONT:

? ? 6、FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:

示例代碼:

Intent intent = new Intent(this, MainActivity.class); //將Activity棧中處于MainActivity主頁面之上的Activity都彈出。 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);

【備注:】【重點,需要認真理解】

例如:

如果依次啟動了四個Activity:A、B、C、D。

在D Activity里,跳到B Activity,同時希望D 和 C 都finish掉,可以在startActivity(intent)里的intent里添加flags標記,如下所示:

Intent intent = new Intent(this, B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

這樣啟動B Activity的同時,就會把D、C都finished掉。

如果B Activity的launchMode是默認的“standard”,則B Activity會首先finished掉舊的B頁面,再啟動一個新的Activity B。 ?如果不想重新再創建一個新的B Activity,而是重用之前的B Activity,可以將B Activity的launchMode設置為“singleTask”。【特別需要注意的是:在部分手機中,如三星手機。即便是singleTask也會產生新的頁面,而不是重用之前的頁面。】


四、Activity的launchMode:

? ?1、standard:?(備注:standard是系統默認的啟動模式。)

????????標準啟動模式,每次激活Activity時都會創建Activity,并放入任務棧中。

????????如果啟動此Activity的Intent中沒有設置FLAG_ACTIVITY_NEW_TASK標志, 則這個Activity與啟動他的Activity在同一個Task中,如果設置了Activity請參考上面FLAG_ACTIVITY_NEW_TASK的詳細說明,"launchMode"設置為"standard"的Activity可以被實例化多次, 可以在Task中的任何位置, 對于一個新的Intent請求就會實例化一次.

? ?2、singleTop:

????????如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,而不會創建新的Activity對象,不過它會調用onNewIntent()方法。如果棧頂部不存在就會創建新的實例并放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。

????????如果啟動此Activity的Intent中沒有設置FLAG_ACTIVITY_NEW_TASK標志, 則這個Activity與啟動他的Activity在同一個Task中,如果設置了Activity請參考上面FLAG_ACTIVITY_NEW_TASK的詳細說明,"launchMode"設置為"singleTop"的Activity可以被實例化多次, ?可以在Task中的任何位置, 對于一個新的Intent請求如果在Task棧頂, 則會用棧頂的Activity響影Intent請求,而不會重新實例化對象接收請求, 如果沒有在棧頂, 則會實例化一個新的對象接收Intent請求.

? ?3、singleTask:

????????如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。

????????和singleTop在名字上即可看出區別,即singleTop每次只檢測當前棧頂的Activity是否是我們需要請求創建的,而singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。

????????"launchMode"設置為"singleTask"的Activity總是在棧底,?只能被實例化一次, 它允許其它Activity壓入"singleTask"的Activity所在的Task棧,如果有新的Intent請求有此標志的Activity, 則系統會清除有此標志的Task棧中的全部Activity,并把此Activity顯示出來.

? ?4、singleInstance:

????????在一個新棧中創建該Activity實例,并讓多個應用共享該Activity實例。一旦這種模式的Activity實例存在于某個棧中,任何應用再激活這個Activity時都會重用該棧中的實例,其效果相當于多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。此啟動模式和我們使用的瀏覽器工作原理類似,在多個程序中訪問瀏覽器時,如果當前瀏覽器沒有打開,則打開瀏覽器,否則會在當前打開的瀏覽器中訪問。此模式會節省大量的系統資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。

"launchMode"設置為"singleInstance"的Activity總是在棧底,只能被實例化一次, 不允許其它的Activity壓入"singleInstance"的Activity所在Task棧, ?即整個Task棧中只能有這么一個Activity.


五、利用Intent屬性調用系統app的示例代碼:

1、布局核心代碼:


android:id="@+id/scrollView1"

android:layout_width="match_parent"

android:layout_height="wrap_content">


android:layout_width="match_parent"

?android:layout_height="match_parent"

android:orientation="vertical">


android:id="@+id/button_main_call"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="直接撥號"/>


android:id="@+id/button_main_dial"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="啟動撥號面板"/>


android:id="@+id/button_main_dialer"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="顯示撥號面板"/>


android:id="@+id/button_main_sms"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="發送短信"/>


android:id="@+id/button_main_setting"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="系統設置"/>

android:id="@+id/button_main_datesetting"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="日期設置"/>

android:id="@+id/button_main_soundsetting"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="聲音設置"/>

android:id="@+id/button_main_wifisetting"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="WIFI設置"/>


android:id="@+id/button_main_web"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="瀏覽網頁"/>


android:id="@+id/button_main_contacts"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="查看聯系人"/>

android:id="@+id/button_main_showimage"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="查看圖片"/>

android:id="@+id/button_main_showtext"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="查看文本"/>

android:id="@+id/button_main_playvideo"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="播放視頻"/>


android:id="@+id/button_main_playaudio"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="播放音頻"/>

android:id="@+id/button_main_home"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="clickButton"

?android:text="HOME"/>



2、java核心代碼:

publicclassMainActivityextendsActivity?{

@Override

protectedvoidonCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

publicvoidclickButton(View?view)?{

Intent?intent?=newIntent();

intent.setAction(android.content.Intent.ACTION_VIEW);

switch(view.getId())?{

caseR.id.button_main_call:

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:10086"));

break;

caseR.id.button_main_dial:

intent.setAction(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:10086"));

break;

caseR.id.button_main_dialer:

intent.setAction("com.android.phone.action.TOUCH_DIALER");

break;

caseR.id.button_main_sms:

intent.setAction(Intent.ACTION_SENDTO);

intent.setData(Uri.parse("smsto:10086"));

intent.putExtra("sms_body",?"該吃飯了,下課吧!");

break;

caseR.id.button_main_setting:

intent.setAction("android.settings.SETTINGS");

break;

caseR.id.button_main_datesetting:

intent.setAction("android.settings.DATE_SETTINGS");

break;

caseR.id.button_main_soundsetting:

intent.setAction("android.settings.SOUND_SETTINGS");

break;

caseR.id.button_main_wifisetting:

intent.setAction("android.settings.WIFI_SETTINGS");

break;

caseR.id.button_main_contacts:

intent.setAction("com.android.contacts.action.LIST_CONTACTS");

break;

caseR.id.button_main_web:

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setData(Uri.parse("http://www.baidu.com"));

break;

caseR.id.button_main_showimage:

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(

Uri.fromFile(newFile("mnt/sdcard/Download/landscape.jpg")),

"image/*");

break;

caseR.id.button_main_showtext:

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(

Uri.fromFile(newFile("mnt/sdcard/Download/info.txt")),

"text/*");

break;

caseR.id.button_main_playaudio:

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(newFile(

"mnt/sdcard/Download/heavencity.mp3")),?"audio/*");

break;

caseR.id.button_main_playvideo:

intent.setAction(android.content.Intent.ACTION_VIEW);

intent.setDataAndType(

Uri.fromFile(newFile("mnt/sdcard/Download/girl.3gp")),

"video/*");

break;

caseR.id.button_main_home:

intent.setAction("android.intent.action.MAIN");

intent.addCategory("android.intent.category.HOME");

break;

default:

break;

}

startActivity(intent);

}

@Override

publicbooleanonCreateOptionsMenu(Menu?menu)?{

//?Inflate?the?menu;?this?adds?items?to?the?action?bar?if?it?is?present.

getMenuInflater().inflate(R.menu.main,?menu);

returntrue;

}

}


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容