Android开发学习笔记 -- 活动相关

Android开发学习笔记 -- 活动相关,第1张

概述活动Intent活动简介Activity包含用户界面的组建,主要用于与用户交互手动创建过程创建一个新的EmptyActivity,GenerateLayoutFile选项是创建布局文件,也就是可视化的界面,LauncherActivity选项是将该活动设置为启动主活动任何活动都要重写onCreate()方法,调用父类的onCreate() 活动 Intent活动简介

Activity包含用户界面的组建,主要用于与用户交互

手动创建过程

创建一个新的Empty ActivityGenerate Layout file选项是创建布局文件,也就是可视化的界面,Launcher Activity选项是将该活动设置为启动主活动

任何活动都要重写onCreate()方法,调用父类的onCreate()方法

创建一个layout文件夹存放布局文件,新建Layout resource file

onCreate()函数中添加

setContentVIEw(R.layout.xxxlayout);

调用setContentVIEw方法给当前活动加载一个布局,参数是布局文件的ID

在AndroIDManifest文件里注册,注册代码是

<application ......    <activity androID:name=".FirstActivity"></activity></application>

如果是主活动,还需要配置<intent-filter>标签

<activity androID:name=".FirstActivity"    androID:label="This is first activity">    <intent-filter>        <action androID:name="androID.intent.action.MAIN" />        <category androID:name="androID.intent.category.LAUNCHER" />    </intent-filter></activity>

销毁活动使用finish()

使用Toast
Toast.makeText(FirstActivity.this, "toast context", Toast.LENGTH_SHORT).show();

参数分别是:上下文,内容,时间长短

Menu

创建menu文件夹,新建Menu resource file,在文件中添加item

<menu .....>    <item        androID:ID="@+ID/add_item"        androID:title="Add"/>....</menu>

然后重写onCreateOptionMenu()方法

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

再定义菜单响应事件

public boolean onoptionItemSelected(MenuItem item) {    swich (item.getItemID()) {    case R.ID.add_item:        .....        bread;    ...    default:    }    return true;}
活动之间的跳转显式

首先创建活动,注册

在第一个活动中设置点击事件跳转

public voID onClick(VIEw v) {    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);    startActivity(intent);}

intent表示就是意图

隐式

不明确指定要跳转的活动,而是指定条件,由系统分析该向哪一个活动跳转

指定的条件就是action和category信息,两者都满足的活动会是跳转目标

<intent-filter>    <action androID:name="com.example.activitytest.ACTION_START"/>    <category androID:name="androID.intent.category.DEFAulT"/></intent-filter>

在第一个活动中添加

public voID onClick(VIEw v) {    Intent intent = new Intent("com.example.activitytest.ACTION_START);    startActivity(intent);}

每个intent中只能指定一个,但category可以有多个

intent.addcategory("com.example.activitytest.MY_category");

没有响应的活动程序会崩溃

更多隐式用法

还可以调用其他程序的活动,例如浏览器,拨号等等
以浏览器为例:

修改点击事件

Intent intent = new Intent(Intent.ACTION_VIEW);intent.setData(Uri.parse("http://www.baIDu.com));startActivity(intent);

ACTION_VIEW是系统内置的动作,点击可以打开浏览器

可以在<intent-filter>里配置<data>标签,指定当前活动能响应什么类型的数据

androID:scheme 协议androID:host 主机androID:path 主机名和端口后的部分androID:mimeType 可以处理的数据类型数据传递向下一个活动传递数据

intent中提供一系列putExtra()方法的重载,存放数据,启动第二个活动后,再从intent中取出来

String data = "hello";Intent intent = new Intent(FirstActivity.this, SecondActivity.class);intent.putExtra("extra_data", data);startActivity(intent);

取出数据的凭据是键值,在第二个活动中

Intent intent = getIntent();String data = intent.getStringExtra("extra_data");
返回数据给上一个活动

使用startActivityForResult()来启动,会在活动销毁的时候返回一个结果给上一个活动

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1);

1是请求码,只要是唯一值就行了

在第二个活动中写入返回逻辑

Intent intent = new Intent();intent.putExtra("data_return", "Hello Return");setResult(RESulT_OK, intent);finish();

setResult()两个参数,第一个是返回的状态结果,第二个是带有数据的intent

在第一个活动中重载onActivityResult()方法

    @OverrIDe    protected voID onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {            case 1:                if (resultCode == RESulT_OK) {                    String returndata = data.getStringExtra("return_data");                    Log.d("FirstActivity", returndata);                }                break;            default:        }    }

请求码用来判断来源

活动的临时数据保存

Activity提供一个onSavedInstanceState()回调方法,在活动被回收之前一定会被调用,在该方法里面保存临时数据
使用Bundle类型参数

@OverrIDeprotected voID onSavedInstanceState(Bundle outState) {    super.onSavedInstanceState(outState);    String tempData = "something";    outState.putString("data_key", tempData);}

在onCreate()方法有一个Bundle参数,可以从这里恢复数据

    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.first_layout);        if (savedInstanceState != null) {            String tempData = savedInstanceState.getString("data_key");            ...        }    }
活动的启动模式

一共4种,standard,singletop,singleTask,singleInstance

可以在AndroIDManifest.xml中给activity指定androID:launchMode属性选择启动模式

standard
这是默认的启动模式,每次启动创建一个新的实例

singletop
当启动活动时活动处于返回栈的栈顶,则直接使用,不会创建新的实例,但是如果不在栈顶就会创建新的实例

singleTask
该活动在整个应用程序中只存在一个实例,启动之前会在返回栈中检查是否存在,如果发现存在,会把该活动之上的活动通通出栈,知道该实例在栈顶
如果不存在则创建

singleInstance
程序活动允许其他程序调用,创建单独的返回栈管理,不管哪个程序来访问该活动,共用同一个返回栈

Tips获取当前活动信息

怎么判断当前是哪一个活动?
创建一个新类BaseActivity,继承AppCompatActivity,重写onCreate()方法,加入语句

Log.d("BaseActivity", getClass().getSimplename());
一次退出多个程序

新建一个ActivityCollector类作为活动管理器

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);    }    public static voID finishAll() {        for (Activity activity : activitIEs) {            if (!activity.isFinishing()) {                activity.finish();            }        }        activitIEs.clear();    }}

在BaseActivity中修改onCreate和onDestroy

//onCreate()ActivityCollector.addActivity(this);//onDestroy()ActivityCollector.removeActivity(this);

一键退出

button3.setonClickListener(new VIEw.OnClickListener() {    @OverrIDe    public voID onClick(VIEw v) {        ActivityCollector.finishAll();    }});
启动活动的最佳写法

封装成一个方法,数据写参数中

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

以上是内存溢出为你收集整理的Android开发学习笔记 -- 活动相关全部内容,希望文章能够帮你解决Android开发学习笔记 -- 活动相关所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存