菜单(menu)Intent和Activity介绍与实例介绍与实例.ppt_第1页
菜单(menu)Intent和Activity介绍与实例介绍与实例.ppt_第2页
菜单(menu)Intent和Activity介绍与实例介绍与实例.ppt_第3页
菜单(menu)Intent和Activity介绍与实例介绍与实例.ppt_第4页
菜单(menu)Intent和Activity介绍与实例介绍与实例.ppt_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、10菜单(menu),Intent和Activity介绍与实例介绍与实例,程浩,学习目标,菜单(menu)介绍与实例 Intent和Activity介绍与实例,菜单(menu)介绍与应用,在上一次课中,我们学习了Android中常用组件的用法和页面布局的技巧知识。在这次课中,我们来学习Android中另外一个比较特殊的部分,menu的使用。 菜单,是手机开发中最常见的一种控件。通常分为列表式菜单,下拉式菜单,弹出式菜单等多种,但是在android中,对菜单进行了统一。虽然进行了统一,但是在功能实现上,并没有很大的改变,均是先添加菜单选项,然后对每一个选项编写对应的响应程序。 下面我们制作一个实

2、例来讲解菜单的使用方法,第一步: 新建一个项目。(这里我们已经创建好了,ex07_menu) 在新建项目的对话框中,选择Creat project from existing source项 单击浏览,找到ex07_menu项目,然后单击确定,菜单(menu)实际编程实现,程序目录结构,第二步: 我们先来看一下布局的xml文件,在layout目录中的main.xml这个XML文件,代码如下,菜单(menu)实际编程实现,代码解释: TextView这个是文本框控件,负责在一块区域上边显示一段文本。 Android:layout_width设置这个Button的宽度,Button的宽度为“wra

3、p_content” ,即刚好把显示在Button上的内容包裹住。 Android:layout_height设置这个Button的高度。 注意到这个符号。这个符号提示XML文件的解析器应当对后的名字进行解析,例如,代码中的string/button1,那么解析器会从values/string.xml里边读取Button1 这个变量的值,进行替换。也就是string/button1,相当于联盟中的Button1,菜单(menu)实际编程实现,第三步:创建onCreate()方法,代码如下: public void onCreate(Bundle savedInstanceState) supe

4、r.onCreate(savedInstanceState); setContentView(R.layout.main); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); TextView text_view_lm =(TextView) findViewById(R.id.text_view_lm); TextView text_view_bl =(TextView) findViewById(R.id.text_view_bl); button1.s

5、etVisibility(View.INVISIBLE); button2.setVisibility(View.INVISIBLE); text_view_lm.setVisibility(View.INVISIBLE); text_view_bl.setVisibility(View.INVISIBLE); 这里设置两个Button为不可见. 第四步:创建onCreateOptionsMenu()方法. 这个方法负责生成menu,它是一个回调方法,即当按下手机设备上的menu按钮的时候Android系统才生成一个包含两个子项的菜单. 在onCreateOptionsMenu()方法里面,首

6、先得到super函数调用后的返回值.并且在方法的最后进行返回,菜单(menu)实际编程实现,调用menu.add() 为menu添加一项. 实现代码如下: public boolean onCreateOptionsMenu(Menu menu) super.onCreateOptionsMenu(menu); menu.add(0, ITEM0, 0, “联盟); menu.add(0, ITEM1, 0, “部落); menu.findItem(ITEM1); return true; 代码分析: groupId:分组的id,如果不用分组就用0 ItemId:menu当中每一项的id.这个

7、id应该是唯一的 Order:排序的信息,根据这个字段的大小,menu对其中的项进行排序显示.orader小的显示在前面,大的在后面. titleRes:menu项的显示信息,菜单(menu)实际编程实现,第五步:实现menu响应单击事件. 这里使用的是方法onOptionsItemSelected(MenuItem item),由于该方法的前缀是on,所以依照惯例这依然是一个回调方法.既这个方法只有在事件触发后才会被Android系统自动调用执行.而这个事件就是单击菜单里的某一项(MenuItem),看到这个方法传进来的参数是MenuItem,也就是menu当中的某一项,实现代码为: pub

8、lic boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case ITEM0: actionClickMenuItem1(); break; case ITEM1: actionClickMenuItem2(); break; return super.onOptionsItemSelected(item,菜单(menu)实际编程实现,代码解释: 如何判断单击的那个MenuItem到底是哪一个呢?这里前面设置过的id就发挥作用了.在前面生成一个menu的时候,给每一个menuItem都赋予一个唯一的id

9、,通过这个唯一的id,可以区分到底是单击的哪个menuItem.这个id通过item.getItemId()获得.在上边的代码中可以看到,当用户单击ITEM0的时候执行actionClickMenuItem1()方法,同理单击到ITEM1的时候,执行actionClickMenuItem2()的方法.这两个方法负责显示两个不同阵营的种族,菜单(menu)实际编程实现,private void actionClickMenuItem1() setTitle(联盟); button1.setVisibility(View.VISIBLE); button2.setVisibility(View.I

10、NVISIBLE); TextView text_view_lm =(TextView) findViewById(R.id.text_view_lm); TextView text_view_bl =(TextView) findViewById(R.id.text_view_bl); text_view_lm.setVisibility(View.VISIBLE); text_view_bl.setVisibility(View.INVISIBLE);,private void actionClickMenuItem2() setTitle(部落); button1.setVisibili

11、ty(View.INVISIBLE); TextView text_view_lm =(TextView) findViewById(R.id.text_view_lm); TextView text_view_bl =(TextView) findViewById(R.id.text_view_bl); button2.setVisibility(View.VISIBLE); text_view_bl.setVisibility(View.VISIBLE); text_view_lm.setVisibility(View.INVISIBLE);,菜单(menu)界面显示,选择联盟 选择按钮

12、选择部落,之前介绍的所有例子都是在一个Activity中进行,但是现实中的应用往往包含好几个,甚至十几或几十个Acvitity。这些Activity是可以相互跳转的,并且它们之间也可以相互传递数据。下面我们用一个例子来讲解Intent和Activity。通过这个例子我们可以学到: Intent的介绍,第一中Intent使用方法的详细介绍 构建一个新的Activity,然后将这个Activity加入到Android的manufest里。 通过startActivity()切换Activity。 通过startActivityForResult()调用Activity。 不同的Activity之间

13、进行相互数据的传递,Intent和Activity介绍与实例,第一步:打开demo程序中的ex07_activity_intent项目,首先看一下ActivityMain里的创造函数onCreate,代码如下: setContentView(R.layout.main); button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(listener1); button2 = (Button) findViewById(R.id.button2); button2.setOnClickListener(lis

14、tener2); setTitle(魔兽世界最新版本3.3巫妖王的陨落); 首先是把layout目录当中main.xml中的layout显示出来。然后得到两个Button的应用,依次各绑定一个单击监听器(OnClickListener,Intent和Activity实例编程实现,第二步:当单击“部落阵营”的时候,程序跳转到Activity2。实现代码如下: listener2 = new OnClickListener() public void onClick(View v) setTitle(这是在主界面); Intent intent2 = new Intent(ActivityMain

15、.this, Activity2.class); startActivity(intent2); ; 当单击“部落阵营”的时候,系统会反向调用绑定在button2上的监听器的onClick()方法。 Intent intent2 = new Intent(ActivityMain.this, Activity2.class);语句用来新建一个Intent,这个Intent描述了从ActivityMain跳转到Acvitity2的一次操作。 startActivity(intent2);语句用来启动intent2,由intent2描述的这次操作才开始执行,Intent和Activity实例编程实

16、现,在Android的官方文档中是这么定义的,Intent是一次即将操作的抽象描述。光这样理解这个定义还很抽象,需要大家在实际操作中去体会。 在Android当中,一共用到了3种Intent,现在使用的这种Intent是第一种,它的作用就是启动一个新的Activity并且可以携带数据。还有两种分别是: 通过Intent来启动一个服务(Service)。 通过Intent来广播一个事件。 这两个类型会在后面的章节Intent和Broadcast面对面中做详细介绍,知识点:什么是Intent,第三步:打开Activity2.java文件,添加如下代码: public void onCreate(B

17、undle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity2); listener = new OnClickListener() public void onClick(View v) finish(); ; button = (Button) findViewById(R.id.button4); button.setOnClickListener(listener); setTitle(部落阵营:部落领导者); bl_text_view = (TextView

18、) findViewById(R.id.bl_text_view);,Intent和Activity实例编程实现,第四步:单击“联盟阵营”,从ActivityMain跳转到Activity1,不过这里的跳转就和之前的跳转有所不同了。 listener1 = new OnClickListener() public void onClick(View v) Intent intent1 = new Intent(ActivityMain.this, Activity1.class); intent1.putExtra(activityMain, 数据来自主界面); startActivityFo

19、rResult(intent1, REQUEST_CODE); ; 代码解释: startActivityForResul()这个方法启动Intent,并且当新的Activity运行结束的时候,还必须执行原Activity里的回调函数,这个函数叫onActivityResult()。使用startActivity()方法启动一个新的Activity,这种方法调用后,当新的Activity执行完后,不会执行回调函数,也不用返回任何值。也就是说新的Activity和旧的Activity没有什么关系,属于Activity的切换,Intent和Activity实例编程实现,Activity还可以传递数

20、据,最常见的就是传递一些名值对,这样在新的Activity当中也可以很方便地获得,通过Intent还可以传递其他类型的数据。在上面例子中,将一组名值对放置进了Intent,这组名值对可以在Activity1这个被ActivityMain启动的Activity中使用。 putExtra()方法将一组名值对添加到Intent的mExtras变量里面。它是一个Bundle类型。Bundle类型使用起来有点像HashMap,并且Bundle的实现确实和Hashmap分不开,最后的名值对其实也是存储到Bundle里面的Hashmap当中。 startActivityForResult(intent1,

21、REQUEST_CODE);这个方法有两个参数,第一个参数是Intent类型,也就是即将要启动的Intent。第二个参数是一个整型的请求码。如果请求码大于0的时候,当新的Activity结束的时候,这个请求码被返回到onActivityResult()的参数里面。通过不同的请求码使得在Activity的回调函数onActivityResult()中针对不同的Activity的返回值进行不同的代码操作,Intent和Activity实例编程实现,Bundle类型,是一个类型安全的容器,它的实现其实就是对HashMap做了一层封装。对于HashMap来讲,任何名值对都可以存进去,值可以是任何的JA

22、VA对象。但是对于Bundle不是这样的。同样存的是名值对,但是这个值只能是基本类型,或者基本类型的数组,如String、int、byte、boolean、char等,知识点:什么是Bundle类型,第五步:单击完“联盟阵营”后, Activity进行了跳转,跳转到Activity1中。在Activity1中程序将把从ActivityMain当中传递过来的值显示在屏幕的标题(title)区域,实现代码如下: Bundle extras = getIntent().getExtras(); if (extras != null) data = extras.getString(activityM

23、ain); setTitle(联盟阵营:+data); lm_text_view = (TextView) findViewById(R.id.lm_text_view); getIntent()方法返回启动这个Activity的Intent,在这里返回的就是ActivityMain中定义的intent1了。 getExtras()返回这个Intent的Bundle类型的变量eExtras。在此变量中存储了Intent携带的数据,Intent和Activity实例编程实现,第六步:单击在Activity1当中的“返回主界面”按钮后,当前Activity结束,并将需要返回的数据放置到Intent

24、当中,实现代码如下: listener1 = new OnClickListener() public void onClick(View v) Bundle bundle = new Bundle(); bundle.putString(store, 联盟领导者); Intent mIntent = new Intent(); mIntent.putExtras(bundle); setResult(RESULT_OK, mIntent); finish();,Intent和Activity实例编程实现,代码解释: Bundle bundle = new Bundle()这条语句中,我们实现

25、了一个Bundle的实例,这个实例用于在Intent中携带需要返回的数据 bundle.putString(“store”,“联盟领导者”)语句,将String类型的名值对放置到bundle中。 mIntent.putExtras(bundle)语句将Bundle放置到Intent当中。 setResult()的第一个参数就是返回的结果码,结果码设置成RESULT_OK,在这个例子运行正常。第二个参数就是需要返回给调用此Activity的Intent。 调用finish()结束当前的Activity,Intent和Activity实例编程实现,第七步:看一下ActivityMain当中的onA

26、ctivityResult()方法。在onClick()方法中,采用了异步的方式来启动Intent,也就是说,启动完Intent后不会等待新的Activity返回值,而是等新的Activity执行完毕后再执行旧的Activity当中的回调函数。这个回调函数就是onActivityResult(int requestCode, int resultCode, Intent data) 此回调函数参数的意义为: requestCode这个值就是原始Intent当中的requestCode,例如在这个例子当中是REQUEST_CODE。 resultCode这个值暗示了在新的Activity当中的操作是否合法正确。如果一切都是正确的,那么返回值就是0,如果返回值不是0,那就说明程序运行出现了问题。Android系统提供了一些标准的值,以便发现程序到底出了什么问题。 Intent当前Activity所启动的新的Activity执行完毕后返回这个Intent。一般需要的只是从这个Intent中得到新的Activity执行完后的返回值。这些值可以通过extras.getString()方法获得,Intent和Activity实例编程实现,starActivityForResult()和onAcvitityResult()可以被认为是一组异步的远程调用。这种形式出现在Activity中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论