Activity包含用户界面的组建,主要用于与用户交互
手动创建过程创建一个新的Empty Activity
,Generate 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.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>
标签,指定当前活动能响应什么类型的数据
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
程序活动允许其他程序调用,创建单独的返回栈管理,不管哪个程序来访问该活动,共用同一个返回栈
怎么判断当前是哪一个活动?
创建一个新类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开发学习笔记 -- 活动相关所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)