四大组件--活动

发布时间:2024年01月24日

?

  1. 活动的基本操作

    1. 设置为主活动

      <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
      
    2. 使用toast(点击某个按钮后出现toast弹窗)

      Button botton1=(Button) findViewById(R.id.button_1);
      button1=setOnClickListener(new View.OnClickListener(){
      		@override
      		public void onClick(View v){
      		Toast.makeText(activity_name.this,"you have clicked button 1",Toast.LENGTH_SHORT).show();
      		}
      	});
      
    3. 使用menu

      1. 在res文件夹中新建menu文件夹,在menu文件夹中添加menu resource file

      2. 在对应的活动中重写onCreateOptionsMenu()方法

        public boolean onCreateOptionsMenu(Menu menu) {
        		getMenuInflater().inflate(R.menu.main,menu);
        		return true;
        }
        
      3. 定义菜单响应事件,在活动中重写onOptionsItemSelected()方法

      public boolean onOptionsItemSelected(MenuItem item) {
      		switch(item.getItemId()) {
      		case R.id.add_item:
      				Toast.makeText(this,"you have clicked add function",Toast.LENGTH_SHORT).show();
      				break;
      		case R.id.remove_item:
      				Toast.makeText(this,"you have clicked remove_function",Toast.LENGTH_LONG).show();
      				break;
      		default;
      		}
      		return true;
      }
      
    4. 销毁活动

  2. 多个活动:使用intent在活动之间穿梭,可以实现多个程序之间的功能共享

    1. 启动一个活动:intent:安卓程序中各组件之间进行交互的一种重要方式,一般可被用于启动活动、启动服务以及发送广播等场景

      1. 显式intent:直接在intent构造函数的参数中指定启动的活动

        1. 设置intent构造函数的参数(即“意图”)
        2. 将构建好的intent传入特定的activity类
        Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
        startActivity(intent);
        
      2. 隐式intent:指定action和category等信息,由系统自己去分析intent,找出合适的活动

        1. 在manifest.xml文件中,对应activity标签下配置<intent_filter>的内容

          <activity android:name="SecondActivity">
          		<intent-filter>
          				<action android:name="com.example.activitytest.ACTION_START"/>;
          				<category android:name="android.intent.category.DEFAULT"/>;
          				<category android:name="com.example.activitytest.ACTION_START"/>;
          		<intent-filter/>
          </activity>
          
        2. 在FirstActivity.java文件中修改对应按钮的点击事件

          botton1.setOnClickListener(){
          		@override
          		public void onClick(View v){
          				Intent intent=new Intent("com.example.activity_test.ACTION_START");
          				Intent.addCategory("com.example.activity_test.MY_CATEGORY");
          				startActivity(intent);
          		}
          });
          
    2. 使用intent向下一个活动传递数据:intent提供了一系列putExtra()方法的重载,可以将需要传递的数据暂存在intent中,启动另一个活动后,只需要把这些数据再从intent中取出即可。

      1. 例如:将first_activity中的数据传到second_activity中

        //first_activity:用显式intent来启动second_activity
        button1.setOnClickListener(new View.OnClickListener(){
        		@override
        		public void onClick(View v){
        				String data="pass to second activity";
        				Intent intent=new Intent(first_activity.this,sencond_activity.class);
        				Intent.putExtra("extra data",data);
        				startActivity(intent);
        		}
        };
        
        //second_activity
        public class second_activity extends AppCompatActivity {
        		@override
        		protected void onCreate(Bundle savedInstanceState) {
        				super.onCreate(savedInstanceState) ;
        				setContentView(R.layout.second_layout);
        				Intent intent=getIntent();
        				String data=intent.getStringExtra("extra data");
        		}
        }
        
    3. 返回数据给上一个活动:startActivityForResult()方法:第一个参数是intent,第二个参数是请求码,用于在之后的回调中判断数据的来源(只要是一个唯一的值就可以了)。

      //first_activity:用显式intent来启动second_activity
      button1.setOnClickListener(new View.OnClickListener(){
      		@override
      		public void onClick(View v){
      				Intent intent=new Intent(first_activity.this,sencond_activity.class);
      				startActivityForResult(intent,1);
      		}
      };
      
      //second_activity
      public class second_activity extends AppCompatActivity {
      		@override
      		protected void onCreate(Bundle savedInstanceState) {
      				super.onCreate(savedInstanceState) ;
      				setContentView(R.layout.second_layout);
      				Button button2=(Button) findViewById(R.id.button2);
      				button2.setOnClickListener(new View.OnClickListener(){
      						@override
      						public void onClick(View v){
      								Intent intent=new Intent();
      								Intent.putExtra("data_return","pass return to first activity");
      								setResult(RESULT OK,intent);
      								finish();
      						}
      				});
      		}
      }
      
  3. 活动的生命周期

    1. 四大状态:运行状态(位于返回栈的顶部),暂停状态(不位于栈顶,但是还是完全存活的),停止状态(不再出于栈顶,而且完全不可见,可能可能会被系统回收),销毁状态

    2. activity类中定义的7个回调方法

      1. onCreate():活动第一次被创建时调用。完成活动的初始化操作,如加载布局、绑定事件等。
      2. onStart():活动由不可见变为可见时调用
      3. onResume():在活动准备好和用户进行交互时调用(位于返回栈的栈顶,且处于运行状态)
      4. onPause():系统准备去启动或恢复另一个活动时调用
      5. onStop():在活动完全不可见的时候调用
      6. onDestroy():在活动被销毁之前调用,释放内存,之后活动将变为销毁状态
      7. onRestart():在活动由停止状态变为运行状态之前调用
    3. 活动的三种生存期

      1. 完整生存期:onCreate和onDestroy之间
      2. 可见生存期:onStart和onStop之间,可见生存期内,活动对于用户总是可见的
      3. 前台生存期:onResume和onPause之间,处于运行状态,可以和用户进行交互
    4. 解决活动被回收时临时数据保存的问题:onSaveInstanceState()方法中携带了一个Bundle类型的参数,Bundle类型的参数提供了一系列用于保存数据的方法,如用putString保存字符串,用putInt保存整型数据

      //被回收的活动中加入以下代码:
      @override
      protected void onSaveInstanceState(Bundle outState){
      		super.onSaveInstanceState(outState);
      		String tempData="something you just typed";
      		outState.putString("data_key",tempData);
      }
      @override
      protected void onCreate(Bundle savedInstanceState) {
      		super.onCreate(savedInstanceState);
      		Log.d(TAG,"onCreate");
      		setContentView(R.layout.activity_main);
      		if(savedInstanceState!=null) {
      				String tempData=savedInstanceState.getString("data_key");
      				Log.d(TAG,tempData);
      		}
      }
      
  4. 活动的启动模式:在AndroidManifest.xml中,通过给<activity>标签指定android:launchMode属性来选择启动模式

    1. standard:默认模式,每启动一个新的活动,就会在反馈栈中入栈并处于栈顶。启动时,系统不会在乎该活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例
    2. singleTop:启动活动时如果发现该活动已经在返回栈的栈顶,则认为可以直接使用它,不会再创建新的活动实例
    3. singleTask:启动该活动时会首先在返回栈中检查是否存在该活动的实例,如果已存在,则直接使用存在的实例,并且把在这个活动之上的所有活动统统出栈
    4. singleInstance:为活动创建一个新的返回栈,解决了共享活动实例的问题

文章来源:https://blog.csdn.net/m0_53178734/article/details/135750981
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。