第二行代码复习笔记之Activity的相关用法

0.Android历史:
Andy Rubin创始人
2008年 谷歌正式发布Android 1.0系统。
1.开启主活动:

<activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        <intent-filter>
    </activity>

2.获得res/values/strings.xml文件种HelloWorld的引用。

HelloWorld

第一种: 在代码中通过R.string.hello_world 可以获得该字符串的引用
第二种: XML中, 用@string/hello_world 可以获得该字符串的引用

第二章 探究活动

活动:可以包含用户界面的组件,主要用于和用户进行交互。 

1.1 Toast 提醒工具
Toast.makeText(this, “提醒内容”, Toast.LENGTH_SHORT).show();
Toast.LENGTH_LONG

1.2 菜单 Menu
res目录下–>New–> Directory 文件夹名menu –>main文件

<menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="+id/add_item"
            android:title="Add" />
        <item
            android:id="remove_item"
            android:title="Remove" />
</menu>

在活动中重写onCreateOptionsMenu()方法。

public boolean onCreateOptionsMenu(Menu menu) {

            getMenuInflater().inflate(R.menu.main, menu);
            return true;
    }

1.3 销毁活动
在按钮的监听器中加一个单独的 finish();

2.1 Intent的使用
显式Intent:
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
隐式Intent:
指定当前可以响应的活动,在AndroidManifest相应的中添加

<intent-filter>
            <action android:name="com.example.activitytest.ACTION_START" />
            <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
在FirstActivity中的按钮点击事件中添加
Intent intent = new Intent("com.example.activitytest.ACTION_START");
            startActivity(intent);
注意:每个Intent只能指定一个Action, 却能指定多个Category。

1)更多隐式用法
button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW) {    //Intent.ACTION_DIAL拨号,不需要权限      Intent.ACTION_CALL 需要权限
                    intent.setData(Uri.parse("www.baidu.com"));  
            //intent.setData(Uri.parse("tel:10086"))      
                    startActivity(intent);
                }
            }
        }); 

—向下个活动传递数据

第一个活动
intent.putExtra("extra_data", data); //向下个活动传递数据,"extra_data"为键, data为值。
第二个活动
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");  //如果是int型数据则是getIntExtra;布尔型即为getBooleanExtra();

—向上个活动返回数据
1.第一个活动

startActivityForResult(intent, 1);  // 第二个参数表示的是用于区别其他的唯一值。
2.第二个活动的点击事件
Intent intent = new Intent();//  新建的Intent并没有传入具体的指向意图,仅仅是用于传递数据
    intent.putExtra("data_return", "Hello FirstActivity");
    setResult(RESULT_OK, intent);   //一般第一个参数两个选择,RESULT_OK      RESULT_CANCELED
    finish();

3.再返回第一个活动时会回掉一个onActivityResult()方法,重写onActivityResult()

eg:

         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                switch (requestCode) {
                        case 1:
                             if (resultCode == RESULT_OK) {
                              String returnedData = data.getStringExtra("data_return");
                          }
                          break;
                      default:
                  }
         }

3.1 活动的生命周期
onCreate; onStart; onResume; onPasue; onStop; onDestroy;

3.2 活动被回收 ,如何保证被回收之前进行保存
eg:

 protected void onSaveInstanceState(Bundle outState) {
                  super.onSaveInstanceState(outState);
                  String tempData = "Something you just typed";
                  outState.putString("data_key", tempData); //同样的,"data_key"是键。
     }  

再向onCreate方法中还原临时数据

      protected void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_main);
             if (savedInstanceState != null) {
                 String tempData = savedInstanceState.getString("data_key");
                 Log.d("MainActivity", "onCreate: "+ tempData);
             }
    }

3.3 活动启动的几种模式
可以在AndroidManifest的中修改模式。
eg:

<activity
            android:name=".MainActivity"
            android:launchMode="singleTop"

standard模式:即默认模式,会将点击的新活动按照活动周期统统放到返回栈中,浪费内存。
singleTop模式: 如果在发现返回栈顶已经是该活动就不会创建新的活动,但是当从一个活动跳转到第二个活动,再跳转到第一个活动,还是会建立实例.
因为栈顶为第二个活动,而要建立的是第一个活动,所以会建立。
singleTask模式:先判断整个返回栈是否有该实例,如果有,那么将位于其上的实例全部出栈销毁,那么它就自然而然变成最上面的了。
singleInstance模式: 为了便于不同程序调用共同的活动,使用此模式单独建立一个返回栈进行存放。

3.4 随时退出程序

创一个class类,将每次创建的活动统一加进来,或者减去。
eg:
public class ActivityCollector {

                 public static List<Activity> activities = new ArrayList<>();

             public static void addActivity(Activity activity) {
                     activities.add(activity);
             }
             public static void removeActivity(Activity activity) {
                    activities.remove(activity);
             }
        }

建立父类BaseActivity继承AppCompatActivity. 以后创建的活动都继承于它就行了

public class BaseActivity extends AppCompatActivity {
             @Override
             protected void onCreate(@Nullable Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    ActivityCollector.addActivity(this);
             }

             @Override
             protected void onDestroy() {
                     super.onDestroy();
                     ActivityCollector.removeActivity(this);
             }

            public static void finishAll() {
                for (Activity activity : activities) {
                activity.finish();
            }
        }
    }

3.5 可以将第一个活动的传递数据放到第二个活动写,这样可以通过第二个活动直接知道哪些数据。
eg:
第二个活动中:

 public static void actionStart(Context context, String data1, String data2) {
         Intent intent = new Intent(context, SecondActivity.class);
         intent.putExtra("param1", data1);
         intent.putExtra("param2", data2);
         context.startActivity(intent);
     }

第一个活动中: 只要直接调用此方法,按照参数传递参数即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值