




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于android平台的音乐播放器开发实验报告学生姓名:学号:班级:计自1201第一章引言1.1项目背景当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Windowsmobile,symbian,以及谷歌的Android操作系统,其中占有开放源代码优势的Android系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌Android系统就能做到。本文的音乐播放器就是基于谷歌Android手机平台的播放器。Android:是谷歌于2007年公布的开放式源代码手机系统,它
2、的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于Android平台的。1.2编写目的现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3,Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。本项目是一款基于Android手机平台的音乐播放器,使Android手机拥有个性的多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时
3、随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练Android的技术和其它在市场上的特点。1.3开发环境Eclipse、AndroidSDK3.2.0第二章系统需求分析2.1功能需求(用例图分析)根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述:2.1.1播放器的用例图假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作,启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下图
4、2.1播放器基本用例图2.1.2用例分析用例名称:启动软件参与者:用户目标:使得用户启动软件并加载手机和Sd卡上的音频文件到播放列表前置条件:无基本事件流:1.用户启动软件2.播放器将播放列表中的当前的歌曲用例名称:播放参与者:用户目标:使得用户可以播放在播放列表中选中的歌曲前置条件:播放器正在运行基本事件流:1用户单击“播放”按钮2.播放器将播放列表中的当前的歌曲用例名称:暂停参与者:用户目标:使得用户可以暂停正在播放的歌曲前置条件:歌曲正在播放且未停止和暂停基本事件流:1用户单击“暂停”按钮2.播放器将暂停当前的歌曲用例名称:停止参与者:用户目标:使得用户可以停止正在播放的歌曲前置条件:歌
5、曲正在播放或暂停基本事件流:1用户单击“停止”按钮2.播放器将停止当前播放的歌曲用例名称:退出参与者:用户目标:使得用户退出或者后台播放音乐前置条件:程序在运行基本事件流:1.用户按返回键2.播放器退出或者进入后台播放第三章概要设计3.1软件播放流程图Stepl.启动软件后,软件自动检索手机和sd卡的音频文件,并组织显示成列表.Step2.点击列表的歌曲名字。Step3.播放音乐。Step4点击暂停,音乐暂停Step5.点击播放转到step3Step6.点击停止停止播放音乐Step7.点击退出。图3.l音乐播放器流程图第四章界面展示41软件部署系统编译生成apk文件,将apk文件拷到手机或者s
6、d卡中,直接打开即可安装。4.2启动软件打开软件后的界面沖严*;NI2D00叫“in:訂点4.3歌曲列表界面丫|:1111:沿3og|iyr瓷卡地tv曲雜卷烦耳是2瑕製*13Uflt密MQ便曲gft-时熹$*5圣杰八iht肉邂-击和當番雄SJtkitowfOr*:n壬力宦-HH订出ft亠O白白4王n-ssti&C妙llqwtanR:NJi#总炫-堀罡届烤tUA七3KTL为亠.;&yiflQidm占X共時曲一井i生*W百.也,戈辽上:;砂界Px茨.F.二丄_J%tv叢初令倉鲁3应“n*.*FT-*K!j.-厂F-V,.甦的收凰JXv庄线音乐入歌曲列表界面44播放界面4.5收藏界面7l|lH瘟石&
7、S二鼻賢R7l|lH1112CQ农心就i|l油7l|lH1112CQ农心就i|l油4.6在线搜索音乐界面尢歼F斤吞电W本地音刊.我的收姦第五章结论通过本次开发解决了诸如SD卡音乐文件搜索并显示、联网搜索歌曲等难题,对安卓的开发有了更深入的认识。通过对Android手机平台的音乐播放器软件的开发,使我对Android音乐播放器系统的整体设计有一个深入的了解,对整个流程也会有一个清晰的认识。开发Android音乐播放器,要抓住开发的核心部分,音乐播放器大体由播放主界面、播放列表、菜单、播放设置、文件浏览、歌曲搜索六大核心组成。本次程序设计,对播放器的系统结构框架做了精心的构思与设计,采用主要开发工
8、具是Eclips4.0+Java语言的支持,AndroidDevelopmentTool的插件,和AndroidSDK2.1版本的全面结合,才使整个音乐播放器系统得以实现。第五章部分源代码以下给出功能实现代码,布局,风格等代码量过大,放在压缩文件中MainActivity.java:packagecom.example.xindong;importandroid.support.v7.app.ActionBarActivity;importandroid.support.v4.app.Fragment;importandroid.content.Intent;importandroid.os.
9、Bundle;importandroid.view.LayoutInflater;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;publicclassMainActivityextendsActionBarActivityOverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstan
10、ceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.fragment_main);Threadthread=newThread()publicvoidrun()trysleep(2500);catch(InterruptedExceptione)e.printStackTrace();finish();Intentintent=newIntent(MainActivity.this,MusicActivity.class);startActivity(intent);thread.star
11、t();OverridepublicbooleanonCreateOptionsMenu(Menumenu)/Inflatethemenu;thisaddsitemstotheactionbarifitispresent.getMenuInflater().inflate(R.menu.main,menu);returntrue;OverridepublicbooleanonOptionsItemSelected(MenuItemitem)/Handleactionbaritemclickshere.Theactionbarwill/automaticallyhandleclicksonthe
12、Home/Upbutton,solong/asyouspecifyaparentactivityinAndroidMid=item.getItemId();if(id=R.id.action_settings)returntrue;returnsuper.onOptionsItemSelected(item);/*Aplaceholderfragmentcontainingasimpleview.*/publicstaticclassPlaceholderFragmentextendsFragmentpublicPlaceholderFragment()Overr
13、idepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState)ViewrootView=inflater.inflate(R.layout.fragment_main,container,false);returnrootView;BandanActivity.javapackagecom.example.xindong;importcom.example.Adapter.MusicListAdapter;importandroid.app.Activity;import
14、android.content.Intent;importandroid.database.Cursor;importandroid.media.MediaPlayer;importandroid.os.Bundle;vider.MediaStore;importandroid.view.KeyEvent;importandroid.view.View;importandroid.widget.AdapterView;importandroid.widget.ListView;importandroid.widget.Toast;importandroid.widget.AdapterView
15、.OnItemClickListener;publicclassBangdanActivityextendsActivityprivateListViewlistview;privateStringmusicpath;privateint_ids;/存放音乐文件的id数组privateString_titles;/存放音乐文件的标题数组privateString_artists;/存放音乐艺术家的标题数组privateString_path;/存放音乐路径的标题数组privateString_times;/存放总时间的标题数组privateString_album;/存放专辑的标题数组priv
16、ateint_sizes;/存放文件大小的标题数组privateString_displayname;/存放名称的标题数组OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.bangdanmusic_list);listview=(ListView)findViewById(R.id.bangdan_music_list);listview.setOnItemClickListener(newMusicListOnCli
17、ckListener();ShowMp3List();/*首歌曲,*显示MP3信息,其中_ids保存了所有音乐文件的_ID,用来确定到底要播放哪一_titles存放音乐名,用来显示在播放界面,*而_path存放音乐文件的路径(删除文件时会用到)*/privatevoidShowMp3List()/用游标查找媒体详细信息/标题,游标Cursorcursor=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,newStringMediaStore.Audio.Media.TITLE,/持续时从0读
18、取MediaStore.Audio.Media.DURATION,/艺术家,2/id,3间,1MediaStore.Audio.Media.ARTIST,MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DISPLAY_NAME,/显示名称,4MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.ALBUM_ID,ID,6MediaStore.Audio.Media.ALBUM,MediaStore.Audio.Media.SIZE,MediaStore.Audio.Media.ARTIST);/
19、大小,8/数据,5/专辑名称/专辑,7null,null,/*将游标移到第一位*/cursor.moveToFirst();/*分别将各个标题数组实例化*/_ids=newintcursor.getCount();_titles=newStringcursor.getCount();_artists=newStringcursor.getCount();_path=newStringcursor.getCount();_album=newStringcursor.getCount();_times=newStringcursor.getCount();_displayname=newStrin
20、gcursor.getCount();sizes=newintcursor.getCount();/*这里获取路径的格式是_pathi=c.geString,为什么这么写?是因为MediaStore.Audio.Media.DATA的关系到的内容格式为/mnt/sdcard/子文件夹名/音乐文件名,而我们想要得到的是/sdcard/子文件夹名音乐文件名*/for(inti=0;icursor.getCount();i+)_idsi=cursor.getInt(3);_titlesi=cursor.getString(0);_artistsi=cursor.getString(2);_pathi
21、=cursor.getString(5).substring(4);/*以下是为提供音乐详细信息而生成的*/_albumi=cursor.getString(7);_timesi=toTime(cursor.getInt(1);_sizesi=cursor.getInt(8);_displaynamei=cursor.getString(4);cursor.moveToNext();listview.setAdapter(newMusicListAdapter(this,cursor);/*时间的转换*/publicStringtoTime(inttime)time/=1000;intminu
22、te=time/60;intsecond=time%60;minute%=60;/*返回结果用string的format方法把时间转换成字符类型*/returnString.format(%02d:%02d,minute,second);/*音乐列表添加监听器,点击之后播放音乐*/publicclassMusicListOnClickListenerimplementsOnItemClickListenerOverridepublicvoidonItemClick(AdapterViewarg0,Viewview,intposition,longid)musicpath=/mnt+_pathp
23、osition;playMusic(musicpath);/*putExtraMusic(position);*/Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class);startActivity(intent);finish();publicvoidplayMusic(Stringmusicpath)tryMediaPlayermp=newMediaPlayer();mp.reset();mp.setDataSource(musicpath);mp.prepare();mp.start();catch(Exce
24、ptione)Toast.makeText(getApplicationContext(),无法播放此文件,Toast.LENGTH_SHORT).show();publicvoidputExtraMusic(intposition)Intentintent=newIntent(BangdanActivity.this,PlayMusicActivity.class);/*intent.putExtra(_ids,_ids);intent.putExtra(_path,_path);intent.putExtra(_titles,_titles);intent.putExtra(_artist
25、s,_artists);intent.putExtra(position,position);startActivity(intent);finish();*/intent=newIntent();Bundlebundle=newBundle();bundle.putInt(position,25);intent.putExtras(bundle);intent.setClass(BangdanActivity.this,PlayMusicActivity.class);startActivity(intent);finish();OverrideprotectedvoidonStop()su
26、per.onStop();privatelongexitTime=0;publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_BACK&event.getAction()=KeyEvent.ACTION_DOWN)if(System.currentTimeMillis()-exitTime)2000)Toast.makeText(getApplicationContext(),再按一次退出程序,Toast.LENGTH_SHORT).show();exitTime=System.currentTim
27、eMillis();elsefinish();System.exit(0);returntrue;returnsuper.onKeyDown(keyCode,event);CollectionActivity.javapackagecom.example.xindong;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importandroid.app.ExpandableListActivity;importandroid.os.Bundle;importan
28、droid.view.KeyEvent;importandroid.widget.SimpleExpandableListAdapter;importandroid.widget.Toast;publicclassCollectionActivityextendsExpandableListActivityOverridepublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.fragment_collection);/一级条目ListMapgr
29、oups=newArrayListMap();Mapgroup1=newHashMap();groupl.put(group,【歌手】);Mapgroup2=newHashMap();group2.put(group,【专辑】);groups.add(groupl);groups.add(group2);/二组条目ListListMapchilds=newArrayListListMap();/第一组二级科目数据ListMapchild1=newArrayListMap();Mapitem1=newHashMap();iteml.put(child,林俊杰);Mapitem2=newHashM
30、ap();item2.put(child,周杰伦);childl.add(iteml);childl.add(item2);/第二组二级科目数据ListMapchild2=newArrayListMap();Mapitem3=newHashMap();item3.put(child,v);Mapitem4=newHashMap();item4.put(child,vv流行主教);Mapitem5=newHashMap();item5.put(child,vv第二天堂);child2.add(item3);child2.add(item4);child2.add(item5);childs.ad
31、d(childl);childs.add(child2);/SimpleExpandableListAdapter构造函数参数/l.content/2.一级条目数据/3.一级条目布局文件/4.一级条目Key5.级条目显示信息控件id/6.二级条目数据/7.二级条目布局文件/8.二级条目Key/9.二级条目显示信息控件idSimpleExpandableListAdapteradapter=newSimpleExpandableListAdapter(this,groups,R.layout.group,newStringgroup,newintR.id.groupTo,childs,R.lay
32、out.child,newStringchild,newintR.id.childTo);setListAdapter(adapter);privatelongexitTime=0;publicbooleanonKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_BACK&event.getAction()=KeyEvent.ACTION_DOWN)if(System.currentTimeMillis()-exitTime)2000)Toast.makeText(getApplicationContext(),再按一次退出
33、程序,Toast.LENGTH_SHORT).show();exitTime=System.currentTimeMillis();elsefinish();System.exit(0);returntrue;returnsuper.onKeyDown(keyCode,event);/*初始化菜单*/publicbooleanonMenuKeyDown(intkeyCode,KeyEventevent)if(keyCode=KeyEvent.KEYCODE_MENU&event.getAction()=KeyEvent.ACTION_DOWN)Toast.makeText(getApplica
34、tionContext(),未定义菜单,Toast.LENGTH_SHORT).show();returntrue;Contsant.javapackagecom.example.xindong;importandroid.content.Context;importandroid.util.DisplayMetrics;importandroid.view.Display;importandroid.view.WindowManager;publicclassContsant/*获取屏幕的大小0:宽度1:高度*/publicstaticintgetScreen(Contextcontext)
35、WindowManagerwindowManager=(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);Displaydisplay=windowManager.getDefaultDisplay();DisplayMetricsoutMetrics=newDisplayMetrics();display.getMetrics(outMetrics);returnnewint(int)(outMetrics.density*outMetrics.widthPixels),(int)(outMetrics.densit
36、y*outMetrics.heightPixels);/*获取文件的后缀名,返回大写*/publicstaticStringgetSuffix(Stringstr)inti=str.lastIndexOf(.);if(i!=-1)returnstr.substring(i+1).toUpperCase();returnstr;/*格式化文件大小Byte-MB*/publicstaticStringformatByteToMB(intsize)floatmb=size/1024f/1024f;returnString.format(%.2f,mb);LRCbean.javapackagecom.
37、example.xindong;/*歌词实体*/publicclassLRCbeanprivateintbeginTime=0;/开始时间publicintgetBeginTime()returnbeginTime;publicvoidsetBeginTime(intbeginTime)this.beginTime=beginTime;publicintgetLineTime()returnlineTime;publicvoidsetLineTime(intlineTime)this.lineTime=lineTime;publicStringgetLrcBody()returnlrcBody
38、;publicvoidsetLrcBody(StringlrcBody)this.lrcBody=lrcBody;privateintlineTime=0;privateStringlrcBody=null;/歌词实体MDialog.javapackagecom.example.xindong;importandroid.app.Activity;importandroid.app.Dialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.text.TextUtils;imp
39、ortandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.ViewGroup.LayoutParams;importandroid.widget.Button;importandroid.widget.FrameLayout;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.TextView;/*自定义的对话框*/publicc
40、lassMDialogextendsDialogpublicMDialog(Contextcontext)super(context);publicMDialog(Contextcontext,inttheme)super(context,theme);publicstaticclassBuilderprivateContextcontext;privateintmIcon=-1;/提示图标privateCharSequencemTitle;/提示标题privateCharSequencemMessage;/提示内容privateCharSequencemPositiveButtonText;
41、/确定按钮文本privateCharSequencemNegativeButtonText;/拒绝按钮文本privateCharSequencemNeutralButtonText;/中间按钮文本privatebooleanmCancelable=true;/是否启用取消键privateintmViewSpacingLeft;privateintmViewSpacingTop;privateintmViewSpacingRight;privateintmViewSpacingBottom;privatebooleanmViewSpacingSpecified=false;/提示内容Viewpr
42、ivateViewmView;privateOnClickListenermPositiveButtonClickListener,mNegativeButtonClickListener,mNeutralButtonClickListener;privateOnCancelListenermCancelListener;/取消键事件privateOnKeyListenermKeyListener;/按键处理publicBuilder(Contextcontext)this.context=context;publicBuildersetMessage(CharSequencemessage)
43、this.mMessage=message;returnthis;publicBuildersetMessage(intmessage)this.mMessage=context.getText(message);returnthis;publicBuildersetTitle(inttitle)this.mTitle=context.getText(title);returnthis;publicBuildersetTitle(CharSequencetitle)this.mTitle=title;returnthis;publicBuildersetIcon(inticon)this.mI
44、con=icon;returnthis;publicBuildersetView(Viewview)this.mView=view;mViewSpacingSpecified=false;returnthis;publicBuildersetView(Viewview,intleft,inttop,intright,intbottom)this.mView=view;this.mViewSpacingLeft=left;this.mViewSpacingTop=top;this.mViewSpacingRight=right;this.mViewSpacingBottom=bottom;mVi
45、ewSpacingSpecified=true;returnthis;publicBuildersetPositiveButton(inttextId,finalOnClickListenerlistener)this.mPositiveButtonText=context.getText(textId);this.mPositiveButtonClickListener=listener;returnthis;publicBuildersetPositiveButton(Stringtext,finalOnClickListenerlistener)this.mPositiveButtonT
46、ext=text;this.mPositiveButtonClickListener=listener;returnthis;publicBuildersetNeutralButton(inttextId,finalOnClickListenerlistener)this.mNeutralButtonText=context.getText(textId);this.mNeutralButtonClickListener=listener;returnthis;publicBuildersetNeutralButton(Stringtext,finalOnClickListenerlisten
47、er)this.mNeutralButtonText=text;this.mNeutralButtonClickListener=listener;returnthis;publicBuildersetNegativeButton(inttextId,finalOnClickListenerlistener)this.mNegativeButtonText=context.getText(textId);this.mNegativeButtonClickListener=listener;returnthis;publicBuildersetNegativeButton(Stringtext,
48、finalOnClickListenerlistener)this.mNegativeButtonText=text;this.mNegativeButtonClickListener=listener;returnthis;publicBuildersetCancelable(booleancancelable)this.mCancelable=cancelable;returnthis;publicBuildersetOnCancelListener(OnCancelListenerlistener)this.mCancelListener=listener;returnthis;publ
49、icBuildersetOnKeyListener(OnKeyListenerlistener)this.mKeyListener=listener;returnthis;publicMDialogcreate()LayoutInflaterinflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);finalMDialogdialog=newMDialog(context,R.style.XfDialog);dialog.setCancelable(mCancelable);/设置取消键
50、事件if(mCancelListener!=null)dialog.setOnCancelListener(mCancelListener);/设置键盘监听事件if(mKeyListener!=null)dialog.setOnKeyListener(mKeyListener);/获取对话框布局Viewlayout=inflater.inflate(R.layout.alert_dialog,(ViewGroup)(Activity)context).findViewById(R.id.parentPanel);layout.setLayoutParams(newLayoutParams(La
51、youtParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);/设置标题(TextView)layout.findViewById(R.id.alertTitle).setText(mTitle);/设置图标if(mIcon!=-1)(ImageView)layout.findViewById(R.id.icon).setBackgroundResource(mIcon);intcount=0;/设置确定按钮if(setButton(layout,mPositiveButtonText,R.id.button1,dialog,mPositiveButton
52、ClickListener)count+;/设置拒绝按钮if(setButton(layout,mNegativeButtonText,R.id.button2,dialog,mNegativeButtonClickListener)count+;/设置中间按钮if(setButton(layout,mNeutralButtonText,R.id.button3,dialog,mNeutralButtonClickListener)count+;if(count=0)layout.findViewById(R.id.buttonPanel).setVisibility(View.GONE);/
53、一个按钮时,显示两边空间if(count=1)layout.findViewById(R.id.leftSpacer).setVisibility(View.INVISIBLE);layout.findViewById(R.id.rightSpacer).setVisibility(View.INVISIBLE);/设置提示消息if(!TextUtils.isEmpty(mMessage)(TextView)layout.findViewById(R.id.message).setText(mMessage);else(LinearLayout)layout.findViewById(R.id
54、.contentPanel).setVisibility(View.GONE);/设置提示内容布局if(mView!=null)finalFrameLayoutcustomPanel=(FrameLayout)layout.findViewById(R.id.customPanel);if(mViewSpacingSpecified)customPanel.setPadding(mViewSpacingLeft,mViewSpacingTop,mViewSpacingRight,mViewSpacingBottom);customPanel.addView(mView);else(FrameL
55、ayout)layout.findViewById(R.id.customPanel).setVisibility(View.GONE);dialog.setContentView(layout);returndialog;publicMDialogshow()MDialogdialog=create();dialog.show();returndialog;privatebooleansetButton(Viewlayout,CharSequencemPositiveButtonText2,intid,finalDialogdialog,finalOnClickListenerlistene
56、r)if(!TextUtils.isEmpty(mPositiveButtonText2)finalButtonbutton1=(Button)layout.findViewById(id);button1.setText(mPositiveButtonText2);if(listener!=null)button1.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)listener.onClick(dialog,DialogInterface.BUTTON_POSITIVE););else/默认事件为关闭对
57、话框button1.setOnClickListener(newView.OnClickListener()publicvoidonClick(Viewv)dialog.cancel();dialog.dismiss(););returntrue;elselayout.findViewById(id).setVisibility(View.GONE);returnfalse;MusicActivity.javapackagecom.example.xindong;importandroid.os.Bundle;importandroid.view.Window;importandroid.wi
58、dget.RadioGroup;importandroid.widget.TabHost;importandroid.widget.RadioGroup.OnCheckedChangeListener;importandroid.app.TabActivity;importandroid.content.Intent;/*以Tabhost+RadioGroup组合*/publicclassMusicActivityextendsTabActivityimplementsOnCheckedChangeListenerprivateTabHosttabhost;privateRadioGroupr
59、adiogroup;OverrideprotectedvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.fragment_music);tabhost=getTabHost();radiogroup=(RadioGroup)findViewById(R.id.tab_group);radiogroup.setOnCheckedChangeListener(thi
60、s);radiogroup.setClickable(true);tabhost.addTab(tabhost.newTabSpec(local_music).setIndicator(local_music).setContent(newIntent(this,MusicListActivity.class);tabhost.addTab(tabhost.newTabSpec(my_collect).setIndicator(my_collect).setContent(newIntent(this,CollectionActivity.class);tabhost.addTab(tabho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川省主要粮油作物重大病虫害防治常用药剂、施药情况记录表
- 高效备考:CPSM2024试题及答案
- 提升CPMM应试能力的试题及答案
- 供应链管理师应对竞争策略试题及答案
- 供应链管理师人际沟通能力试题及答案
- 2024年SCMP考试预测及试题答案
- 采购管理师市场分析试题及答案
- 保健急救知识培训课件
- 2024年注册安全工程师笔试实战试题及答案
- SCMP考试变化与试题答案应对
- 希沃白板5考题及答案
- 青岛市2025年高三年级第一次适应性检测语文试题及参考答案
- 2025年药物制剂工(中级)考试题库(附答案)
- 上海市第一至十八届高一物理基础知识竞赛试题及答案
- 测量仪器自检记录表(全站仪)
- 标准田字格模板A4纸word
- 贫血的实验室诊断课件(PPT 43页)
- 现代操作系统教程(慕课版)-课后习题答案1-8章全带原题
- berg平衡评定量表
- 升降车验收记录表
- 为孩子提供担保的父母亲出资证明参考样本(英文)
评论
0/150
提交评论