首页 > 其他分享 >第四章activity

第四章activity

时间:2024-04-28 11:58:06浏览次数:19  
标签:void Bundle Intent activity import android 第四章

第四章activity

1.生命周期方法

onResume获取焦点

onPause失去焦点

package com.example.lifestyle;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("MainActivity","调用onCreate方法");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.i("MainActivity","调用onStart方法");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("MainActivity","调用onResume方法");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i("MainActivity","调用onPause方法");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i("MainActivity","调用onStop方法");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("MainActivity","调用onDestroy方法");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i("MainActivity","调用onRestart方法");
    }

}

目的是显示这些方法的顺序

第一个Log会红色需要alt+enter

打开程序时方法进行顺序

onCreate->onStart->onResume

退出程序时

onPause->onStop->onDestroy

单个程序无法重启onRestart

 

2.创建activity

方法一:自动生成

 

 取新activity名称和并创建对应布局layout

方法二:手动写java文件创建activity(其实activity就是java文件)但这样只增加了activity,但layout没增加

方法在存放activity的包下创建java文件

记得继承时导包 ,alt+shift+enter

干完这些以后最重要的是在manifest文件里配置新增加的activity(注册)

方法是

<activity android:name=".新增加的activity名"></activity>

黄色部分也可以写这个activity所在包名.新增加的activity名

3.开启关闭activity

在mainactivity里写

mainactivity

 package com.example.oc;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.start).setOnClickListener(this);
findViewById(R.id.finish).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.start){
       Intent intent=new Intent(MainActivity.this,activitytwo.class);
       startActivity(intent);}
        else if(v.getId()==R.id.finish){
            finish();
        }




    }

}

 

activity_main

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

   <Button
       android:id="@+id/start"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="start"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="finish"
        android:id="@+id/finish"/>

</LinearLayout>

总结:

重点俩函数

(1)开启activity:

Intent 名称=new Intent(上下文.this,要打开的activity名称.class);

startActivity(名称);

还有一种方法

Intent 名称=new Intent();

名称.setClass(上下文.this,要打开的activity名称.class);

startActivity(名称);

(2)关闭activity

finish();

除此之外需要在onCreate函数里先设置监听器 findViewById(R.id.start).setOnClickListener(this);

然后写点击函数

onClick函数

public void onClick(View v) {
        if(v.getId()==R.id.start){
       Intent intent=new Intent(MainActivity.this,activitytwo.class);
       startActivity(intent);}
        else if(v.getId()==R.id.finish){
            finish();
        }    }

4.显式intent,隐式intent

(1)显式intent

与开启关闭intent用同法

Intent 名称=new Intent(上下文.this,要打开的activity名称.class);

startActivity(intent);

(2)隐式intent

Intent n=new Intent();
n.setAction("thirdact");//这个引号里面填的是manifest里面为这个要打开的activity设置的action可以设置任意值
startActivity(n);
Mainactivity
 package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.start1).setOnClickListener(this);
        findViewById(R.id.start2).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.start1){
            //显示意图打开
            Intent i=new Intent(MainActivity.this,secondactivity.class);
            startActivity(i);
        }
        else if(v.getId()==R.id.start2){
            Intent n=new Intent();
            n.setAction("thirdact");
            startActivity(n);
        }
    }
}
activity_main
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:orientation="vertical"
   >
    <Button
        android:id="@+id/start1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="显示意图"
        />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/start2"
    android:text="隐式意图"
    />
</LinearLayout>

 

manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">
        <activity
            android:name=".thirdactivity"
            android:exported="false" >
            <intent-filter>
                <action android:name="thirdact" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".secondactivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

注意要为隐式意图设置category,action

category里面要设置成default

action的name可以设置任何值

  <action android:name="thirdact" />

                <category android:name="android.intent.category.DEFAULT" />

5.数据传递

方法一:putExtra

在MainActivity里

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.start1).setOnClickListener(this);
findViewById(R.id.start2).setOnClickListener(this);
}

@Override
public void onClick(View v) {
if(v.getId()==R.id.start1){
//显示意图打开
Intent i=new Intent();
i.setClass(MainActivity.this,secondactivity.class);
//传递数据(传过去)
i.putExtra("stuname","wmy");
i.putExtra("num",1);
startActivity(i);
}
else if(v.getId()==R.id.start2){
Intent n=new Intent();
n.setAction("thirdact");
startActivity(n);
}
}
} 总结:intent的名称.putExtra("变量名",值); 收到数据 在secondactivity.java里写 package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class secondactivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secondactivity);
Intent f=getIntent();
String stn=f.getStringExtra("stuname");
int a=f.getIntExtra("num",0);
Toast.makeText(secondactivity.this,stn+a,Toast.LENGTH_LONG).show();

}
} 总结:收数据 显获取当前Intent getIntent 如何当前intent名称.get数据类型Extra("变量名在来源地定义的"); 方法二:Bundle(数据集装箱)
Mainactivity.java
 package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.start1).setOnClickListener(this);
        findViewById(R.id.start2).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.start1){
            //显示意图打开
            Intent i=new Intent();
            i.setClass(MainActivity.this,secondactivity.class);
            //传递数据
           Bundle s=new Bundle();
           s.putString("stn","小明");
           s.putInt("num",1);
           i.putExtras(s);
            startActivity(i);
        }
        else if(v.getId()==R.id.start2){
            Intent n=new Intent();
            n.setAction("thirdact");
            startActivity(n);
        }
    }
}

放入集装箱

Bundle 名称=new Bundle();

Bundle名称.put数据类型(变量名,值);//可能很多句

intent名称.putExtras(Bundle名称);

secondactivity.java
 package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class secondactivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_secondactivity);
        Bundle h=getIntent().getExtras();
        String n=h.getString("stn");
        int m=h.getInt("num");
        Toast.makeText(secondactivity.this,n+m,Toast.LENGTH_LONG).show();

    }
}

取出集装箱

Bundle 名称=getIntent().getExtras();//获取当前intent的Bundle

Bundle名称.get数据类型(变量名);

6.数据回传

例如:

先从mainactivity跳向另一个activity再带着从哪个activity弄来的数据跳回来

描述:

从mainactivity点击按钮先跳向sj,在sj里点击按钮传入数据,带回mainactivity并用Toast显示

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >

    <Button
        android:id="@+id/a1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="数据回传"
        android:onClick="click"
        />
</LinearLayout>
Mainactivity.java
 package com.example.sjhch;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
    public void click(View v){
        Intent i=new Intent(MainActivity.this, sj.class);
       startActivityForResult(i,1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==1&&resultCode==2){
            String h=data.getStringExtra("studentname");
            Toast.makeText(MainActivity.this,h,Toast.LENGTH_LONG).show();
        }
    }
}
activity_sj.xml
 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >
<Button
    android:id="@+id/out"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="数据回"/>
</LinearLayout>
sj.java
 package com.example.sjhch;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class sj extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sj);
        findViewById(R.id.out).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent m=new Intent();
        m.putExtra("studentname","abc");
        setResult(2,m);
        finish();
    }
}

总结:

其实就三个函数

1.从mainactivity跳向sj 函数一 startActivityForResult

这个intent使用显式法创建

Intent i=new Intent(MainActivity.this, sj.class);

startActivityForResult(intent名称,请求码整型自定义值)

2.从sj带着数据调回mainactivity 函数二  setResult(返回码自定义整数,intent名称);

setResult(intent名称,返回码自定义整数);

这里装入数据是这么弄(创个intent,然后putExtra)

Intent m=new Intent();//(里面不用写)
m.putExtra("studentname","abc");

 setResult以后记得关闭当前界面返回主界面

finish()

3.在返回主界面显示结果 函数三 onActivityResult(请求码,返回码,intent名称)

7.activity启动模式

标签:void,Bundle,Intent,activity,import,android,第四章
From: https://www.cnblogs.com/luckyhappyyaoyao/p/18145117

相关文章

  • 第四章:Total Store Order and the x86 Memory Model
    chapter4:TSO于X86内存模型1、为什么需要TSO/x86处理器内核长期以来使用writebuffer来保存已提交的store指令,直到内存系统可以处理这些store请求。当store指令提交时,store请求进入writebuffer,而当需要写入的缓存行在内存系统中可以保证缓存一致性时,store请求就退出writebuffer......
  • MainActivity 示例
    packagecom.lingrui.btprint;importandroid.Manifest;importandroid.app.Activity;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothSocket;importandroid.content.BroadcastReceiver;im......
  • 地铁查询系统Android,MainActivity
    packagecom.example.metro_info_front_end;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.ArrayAdapter;importandroid.widget.AutoCompleteTextView;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid......
  • 《无垠的太空(8).提亚玛特之怒》第四章:特蕾莎
    第四章:特蕾莎特蕾莎·杜阿尔特是高级领事杜阿尔特的独生女,从蹒跚学步起就住在拉科尼亚的帝国大厦,如今她快14岁了,伊利奇上校担任她的教师。近来,父亲要她一起参加帝国事务的报告会议,并在会后和他探讨。父亲把她当帝国的接班人培养,以便他出意外后由她接替高级领事的位置。 完整发......
  • 【13137】第四章 领导与战略计划
    目录1.单选题2.多选题3.名词解释题4.简答题5.论述题1.单选题......
  • 第四章 探究 FBV 视图
    第四章探究FBV视图​ 视图是Django的MTV的架构模式的V部分,主要负责处理用户请求和生成相应的响应内容,然后在页面或其他类型文档中显示。使用视图函数处理HTTP的请求,即在视图函数中定义函数,这种方法称为FBV。4.1设置响应方式​ 网站的运行原理是遵从HTTP协议,......
  • Android Studio学习14——认识Activity的启动模式
    默认情况下都是Standard模式借鉴other借鉴2......
  • Android Studio学习13——认识Activity的页面任务栈
    ......
  • 19.14.Android四大组件之一活动单元Activity 下
    任务栈和启动模式Fragment1.关于任务栈和启动模式(了解)Android中的任务栈压栈和出栈即开启的往里面压位于最上面找哪个上面的被弹出启动模式四种模式:standard每启动一个Activity就创建一个实例singleTop模式判断是否存在Activity位于栈顶如果存在直接复......
  • 2.1Activity简单使用
    了解Activity的生命周期和启动模式也是十分有必要的 怎么用上ViewBinding?替代findViewByIdActivity中按键绑定和Toast的使用Intent的使用,Activity跳转,传递数据等  ......