[Android官方Demo系列](API 15)AppNavigation

来源:互联网 发布:手机截取音乐软件 编辑:程序博客网 时间:2024/04/29 11:09

路径:samples\android-15\AppNavigation
简介:APP导航

这里写图片描述

主要知识点:
  • 介绍了活动之间导航的知识

代码解析:

https://github.com/lzctbyong/AppNavigation.git

  • 知识点一:声明父子活动的关系
<activityandroid:parentActivityName="com.example.myfirstapp.MainActivity"//API<16    <meta-data    android:name="android.support.PARENT_ACTIVITY"    android:value="com.example.myfirstapp.MainActivity"/></activity>
  • 知识点二:在左上方添加返回上一级图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  • 知识点三:navigateUpFromSameTask( )
@Overridepublic boolean onOptionsItemSelected(MenuItemitem){switch(item.getItemId()){   //Respond to the action bar's Up/Home button    case android.R.id.home:        NavUtils.navigateUpFromSameTask(this);    return true;}return super.onOptionsItemSelected(item);}/*However, using  navigateUpFromSameTask() is suitableonly when your app is the owner of the currenttask(that is, the user began this task from your app). If that's not true and youractivity was started in a task that belongs to a different app大概是说,该方法只是用于同一个APP任务栈的返回,如果是其他APP调用的,则不适用。*/
  • 知识点四:加入活动栈
1. calling shouldUpRecreateTask()checkwhether the current activity instance exists in a different app's task.2.If it returns true,build a new task  with TaskStackBuilder.Otherwise, you can use the    navigateUpFromSameTask() method as shown above.

For example:

public boolean onOptionsItemSelected(MenuItemitem){     switch(item.getItemId()){     case android.R.id.home:     Intent upIntent=     NavUtils.getParentActivityIntent(this);   if(NavUtils.shouldUpRecreateTask(this,upIntent)){        TaskStackBuilder.create(this)        .addNextIntentWithParentStack(upIntent)        .startActivities();}else{    NavUtils.navigateUpTo(this,upIntent);}    return true;}    return  super.onOptionsItemSelected(item);}
  • 知识点五:新建活动栈
   Intent target = new Intent(this, OutsideTaskActivity.class)                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |                          Intent.FLAG_ACTIVITY_TASK_ON_HOME);        startActivity(target);
  • 知识点六:隐式调用活动

    Intent mIntent = new Intent(Intent.ACTION_VIEW)        .setType("application/x-example")        .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);startActivity(mIntent);

对应AndroidManifest.xml:

<!-- 活动3 -->        <activity            android:name=".ContentViewActivity"            android:label="ContentViewActivity"            android:parentActivityName=".ContentCategoryActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <action android:name="android.intent.action.VIEW"/>                <category android:name="android.intent.category.DEFAULT"/>                <data android:mimeType="application/x-example"/>            </intent-filter>        </activity>
  • 知识点七:建立通知
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)                /*状态栏信息*/                .setTicker("Direct Notification")                /*小图标*/                .setSmallIcon(android.R.drawable.stat_notify_chat)                /*标题*/                .setContentTitle("Direct Notification")                /*内容*/                .setContentText("This will open the content viewer")                /*自动消失*/                .setAutoCancel(true)                /*设置intent*/                .setContentIntent(                /*添加到父亲栈*/                TaskStackBuilder.create(this).addParentStack(ContentViewActivity.class)                .addNextIntent(new Intent(this, ContentViewActivity.class)                .putExtra(ContentViewActivity.EXTRA_TEXT, "From Notification"))                 .getPendingIntent(0, 0));        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);        nm.notify("direct_tag", R.id.direct_notification, mBuilder.build());注意:对话框活动主题必须声明为Dialog<style name="Theme.Dialog" parent="@android:style/Theme.Dialog"/>

项目总结:
  1. 难度系数:3星

  2. 主要难点

            同一个活动栈中的导航          不同活动栈中的导航          对话框活动的使用

官方资料:

https://developer.android.com/training/implementing-navigation/ancestral.html

0 0
原创粉丝点击