二,活动的基本用法

1,手动创建活动

2.创建和加载布局文件

app/src/main/res   new->Directory  layout  ->first_layout  

3.添加按钮操作

<Button 
	android:id="@+id/button_1"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:text="Button 1"/>

4.在activity中引用 

setContentView( R.layout.first_layout );

5.注册活动: Manifest.xml

<activity android:name=".HelloWorldActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

6.在活动中使用Toast (定义Button1按钮)

Button button1 = (Button)findViewById(R.id.button_1 );
        button1.setOnClickListener( new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Toast.makeText( HelloWorldActivity.this,"Cliected", Toast.LENGTH_SHORT ).show();
            }
        });

7.在活动中使用Menu

res 下 new DIR menu  new main 菜单文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/add_item"
        android:title="Add" />
    <item
        android:id="@+id/remove_item"
        android:title="Remove" />
</menu>

8重写Activity的onCreateOptionsMenu() 方法

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate( R.menu.main, menu);
        return true;
    }

9.添加点击方法  重写 onOptionsItemSelected();

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch ( item.getItemId() ){
            case R.id.add_item:
                Toast.makeText( this,"clicked add", Toast.LENGTH_SHORT ).show();
                break;
            case  R.id.remove_item:
                Toast.makeText( this,"clicked remove", Toast.LENGTH_SHORT).show();
                break;
            default:

        }
        return true;
    }

10.销毁一个活动

    finish();

二,使用Intent在活动之间跳转

    Intent是Android程序中各个组件交互的一种重要方式(分为显示和隐式)

显示的Intent交互

        1.创建另一个空活动

        2.创建样式文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/second_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.helloworld.SecondActivity">
    <Button
        android:id="@+id/button_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 2"/>

</RelativeLayout>
    3.修改Button1的响应函数来调用second_activity

    

button1.setOnClickListener( new View.OnClickListener(){
            @Override
            public void onClick(View v) {
               // Toast.makeText( HelloWorldActivity.this,"Cliected", Toast.LENGTH_SHORT ).show();
                Intent intent = new Intent( HelloWorldActivity.this,SecondActivity.class );
                startActivity( intent );
            }
        });

  隐式的Intent交互

        隐式的并不明确指定要启动那个活动,而是指定了一系列更为抽象的 action和category信息

    1.配置 <intent-filter> 标签

 <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
隐式启动 secondactivity
@Override
            public void onClick(View v) {
               // Toast.makeText( HelloWorldActivity.this,"Cliected", Toast.LENGTH_SHORT ).show();
//                Intent intent = new Intent( HelloWorldActivity.this,SecondActivity.class );
//                startActivity( intent );
                Intent intent = new Intent( "com.example.activitytest.ACTION_START" );
                intent.addCategory( "com.example.activitytest.MY_CATEGORY" );
                startActivity( intent);
            }
        });

更多隐式Intent用法

自己建立一个可以打开网页的应用

    Empty Activity  ThirdActivity

页面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/third_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.helloworld.ThirdActivity">
    <Button
        android:id="@+id/button_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="Button 3"
        />
</RelativeLayout>

修改Manifest.xml 中 ThirdActivity的注册信息

<activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>


除了http协议还有拨号协议,定位协议等等

Button button3 = (Button)findViewById( R.id.button_3);
        button3.setOnClickListener( new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent( Intent.ACTION_DIAL );
                intent.setData(Uri.parse("tel:13814047169") );
                startActivity(intent);
            }
        });


三:活动的生命周期

  1. 1)onCreate()

    这个方法在活动第一次创建的时候会被调用。注意,是第一次创建。如果活动从停止状态重新进入运行状态,是不会调用这个方法的

  2. 3

    2)onStart()

    这个活动由不可见进入可见的时候调用。比如,当从停止状态进入到运行状态会调用。比如,一个activity中打开一个对话框,再按返回键重新进入这个活动,这个方法是不会被调用的。

  3. 4

    3)onResume()

    当活动准备好和用户进行交互的时候调用。举例,现在许多同学在一起赛跑,老师说,下一组要跑步的走到起跑线,准备跑。此时就是onResume(),此时的活动一定位于前台,学生一定站在了跑道上,一个道理。

  4. 5

    4)onPause()

    当前活动需要去启动另一个活动,或者恢复另一个活动的时候去调用。这个方法中,我们可以将一些CPU资源等释放掉,因为当你不在前台了,处于暂停或者停止甚至是销毁状态了,就应该让出一些资源,减少系统的负担。

  5. 6

    5)onStop()

    活动完全不可见的时候调用。比如,当前activity启动了一个对话框式的活动,那么是不会执行onStop()的。但启动了一个全屏的activity,就会得到调用。

  6. 7

    6)onDestroy()

    这个很好理解,不用多说了,活动被销毁了,按返回键了,或者finish等

  7. 8

    7)onRestart()

    由停止状态变为运行状态了,被调用。如果是暂停状态变为运行状态,是不会被调用的。


四:活动的启动模式

    standard singleTop singleTask    singleInstance  可以在AndroidManifest.xml中通过给<activity>标签指定Android:launchMode属性来选择启动模式

1.standard 模式

    每次启动新的活动都会在栈顶创建新的实例, 不管这个实例在栈中是否存在。  按返回键依次退出

2.singleTop 模式

    当启动方式指定为singleTop时, 在启动活动时如果发现要启动的活动已经存在于栈顶,则直接使用不创建新的活动, 如果要启动活动不是在栈顶则还是会创建新的实例

3.singleTask

    任务栈中只允许存在一个活动实例, 如果要启动的实例已经存在栈中,则直接使用该实例, 并把这个实例上所用活动统统出栈。  

4.singleInstance

    指定为singleInstance模式的活动会启动一个新的任务栈来管理这个活动,可以使用getTaskId() 函数来获取当前函数的任务栈。


五,开发过程中管理自己的活动

        1.创建一个普通的Java文件,这个类继承于AppCompatActivity ,  然后让其他活动继承这个类, 当加载页面时,当前活动的名称就会被打印出来

public class BaseActivity extends AppCompatActivity {
    private static final String TAG = "BaseActivity";
    @Override
    protected void onCreate( Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, getClass().getSimpleName() );
        ActivityCollector.addActivity( this );
    }

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

2.如何管理程序, 一个按钮就可以退出程序

    让活动初始化的时候就把当前的活动添加到List容器中, onDestroy() 的时候销毁掉, 当需要退出当前App的时候, 只需要调用ActivityCollector.finishAll() 即可销毁所有的活动

public class ActivityCollector {
    public static List<Activity> activities;

    static {
        activities = new ArrayList<>();
    }
    public static  void addActivity( Activity activity ){
        activities.add( activity );
    }

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

    public static void  finishAll(){
        for( Activity act : activities ){
            if (!act.isFinishing() ){
                act.finish();
            }
        }
    }
}
3.活动的启动方式。

        为你的每个活动添加类似于如下的启动代码

例如给SecondActivity 活动添加如下的代码

 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);
    }

当需要给SecondActivity传递参数并启动SecondActivity的时候只需要调用如下代码

    SecondActivity.actionStart( FirstActivity.this, "part1", "part2" ); 









    


    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值