版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲教师:日期:第7章深入理解Activity与FragmentAndroid程序设计目录/CONTENTS7.1建立、配置和使用Activity7.2Activity的生命周期和启动模式7.3Fragment详解1.掌握Activity的配置和使用。2.了解Activity的生命周期。3.了解Fragment原理。学习目标4.掌握Fragment的应用。7.1建立、配置和使用Activity7.1.1 Activity介绍一个Activity是一个应用程序组件,它会提供一个屏幕,用户可通过与屏幕交互完成某项任务,例如拨号、拍照、发送email、看地图。每一个Activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其他窗口之上。一个应用程序通常由多个Activity组成。通常,每个应用程序中都有一个MainActivity,相当于程序的入口。其他Activity从这个Activity启动。每一次一个Activity启动,前一个Activity就停止了,但是系统会将Activity保留在一个栈上(backstack)。当一个新Activity启动,它被推送到栈顶,取得用户焦点。BackStack符合“后进先出”原则,所以,当用户完成当前Activity然后单击back按钮后,它会被弹出栈(并且被摧毁),然后之前的Activity恢复。7.1建立、配置和使用Activity7.1.2 Activity配置配置Activity时通常指定如下几个属性。(1)name:指定该Activity的实现类的类名。(2)icon:指定该Activity对应的图标。(3)label:指定该Activity的标签。(4)exported:指定该Activity是否允许被其他应用调用。如果将该属性设为true,那么该Activity将可以被其他应用调用。(5)launchMode:指定该Activity的加载模式,该属性支持standard、singleTop、singleTask和singleInstance这4种加载模式。除此之外,配置Activity时通常还需要指定一个或多个<intent-filter.../>元素,该元素用于指定该Activity可响应的Intent。7.1建立、配置和使用Activity7.1.3 Activity的启动与关闭Activity启动其他Activity有如下两个方法。(1)startActivity(Intentintent):启动其他Activity。(2)startActivityForResult(Intentintent,intrequestCode):以指定的请求码(requestCode)启动Activity,而且程序将会获取新启动的Activity返回的结果(通过重写onActivityResult(..)方法来获取)。其中requestCode参数代表了启动Activity的请求码,该请求码的值由开发者根据业务自行设置,用于标识请求来源。方式一://创建Intent对象Intentintent1=newIntent();//设置需要启动的Activity,以及要启动Activity的上下文环境intent1.setClass(this,MyActivity.class);方式二://直接创建Intent对象,包含要启动的Activity信息Intentintent2=newIntent(this,MyActivity.class);7.1建立、配置和使用ActivityAndroid为关闭Activity准备了如下两个方法:(1)finish():结束当前Activity。(2)finishActivity(intrequestCode):结束以startActivityForResult(Intentintent,intrequestCode)方法启动的Activity。7.1建立、配置和使用Activity【例7-1】Activity的启动和关闭实现的过程如下。新建一个activitystartupshutdown的Module,该Module一共包含了两个Activity,并在AndroidManifest清单文件中配置两个Activity。第一个Activity的界面布局非常简单,只包含一个按钮和文本提示,其中按钮的作用主要是启动第二个Activity。第一个Activity对应的布局代码activity_main.xml的代码如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/start_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="启动第一个Activity"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="我是MainActivity"/></RelativeLayout>7.1建立、配置和使用Activity第二个Activity对应的布局也比较简单,包含3个按钮和一个文本提示,其中一个按钮用于简单的返回上一个Activity,第二个按钮用于结束自己并返回上一个Activity,第三个按钮直接结束自己。第二个Activity对应的布局代码activity_second.xml的代码如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/back_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="返回"/><Buttonandroid:id="@+id/back_close_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/back_btn"android:text="返回并关闭自已"/><Buttonandroid:id="@+id/close_btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/back_close_btn"android:text="关闭自已"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:text="我是SecondActivity"/></RelativeLayout>7.1建立、配置和使用ActivityAndroidManifest清单文件的Activity配置如下:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="/apk/res/android"package="com.example.a713"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activityandroid:name=".activity_second"></activity><activityandroid:name=".MainActivity"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity></application></manifest>7.1建立、配置和使用Activity编辑第一个Activity,MainActivity的代码如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButtonstartBtn=(Button)findViewById(R.id.start_btn);startBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(MainActivity.this,activity_second.class);startActivity(intent);}});}}7.1建立、配置和使用Activity编辑第二个Activity,SecondActivity的代码如下:publicclassactivity_secondextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);ButtonbackBtn=(Button)findViewById(R.id.back_btn);ButtonbackCloseBtn=(Button)findViewById(R.id.back_close_btn);ButtonCloseBtn=(Button)findViewById(R.id.close_btn);backBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(activity_second.this,MainActivity.class);startActivity(intent);}});backCloseBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){Intentintent=newIntent(activity_second.this,MainActivity.class);startActivity(intent);}});CloseBtn.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewsource){finish();}});}}7.1建立、配置和使用Activity运行结果如图7-1所示。7.1建立、配置和使用Activity7.1.4 使用Bundle在Activity之间交换数据当一个Activity启动另一个Activity时,常常会有一些数据需要传过去,这时,这两个Activity之间就需要一个信使,即Intent,我们只需要将交换的数据放入Intent中就可以了。Intent提供了多个重载的方法来“携带”额外的数据:(1)putExtras(Bundledata):向Intent中放入需要“携带”的数据包。(2)BundlegetExtras():取出Intent中所“携带”的数据包。(3)putExtra(Stringname,Xxxvalue):向Intent中按key-value的形式存入数据。(4)getXxxExtra(Stringname):从Intent中按key取出指定类型的数据。(5)putXxx(Stringkey,Xxxdata):向Bundle中放入Int,Long等各种类型的数据。(6)putSerializable(Stringkey,Serializabledata):向Bundle中放入一个可序列化的对象。(7)getXxx(Stringkey):从Bundle中取出Int,Long等各种类型的数据。(8)getSerializable(Stringkey,Serializabledata):从Bundle中取出一个可序列化的对象。7.1建立、配置和使用Activity【例7-2】两个Activity之间通过Bundle交换数据。布局文件activity_main代码如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/area"android:paddingBottom="10sp"android:hint="请输入所在地区"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/street"android:paddingBottom="10sp"android:hint="请输入街道"android:layout_below="@+id/area"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/detail"android:hint="请输入详细地址"android:layout_below="@+id/street"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/name"android:hint="请输入姓名"android:layout_below="@+id/detail"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:paddingBottom="10sp"android:id="@+id/tel"android:hint="请输入电话"android:layout_below="@+id/name"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/et_email"android:hint="请输入邮箱"android:layout_below="@+id/tel"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/button"android:text="submit"android:layout_below="@id/et_email"/></RelativeLayout>7.1建立、配置和使用Activity该界面布局对应的Java代码如下:publicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonbutton=findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Stringsite1=((EditText)findViewById(R.id.area)).getText().toString();Stringsite2=((EditText)findViewById(R.id.street)).getText().toString();Stringsite3=((EditText)findViewById(R.id.detail)).getText().toString();Stringname=((EditText)findViewById(R.)).getText().toString();Stringtel=((EditText)findViewById(R.id.tel)).getText().toString();Stringemail=((EditText)findViewById(R.id.et_email)).getText().toString();if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&!"".equals(tel)&&!"".equals(email)){Intentintent=newIntent(MainActivity.this,ResultActivity.class);Bundlebundle=newBundle();bundle.putCharSequence("name",name);bundle.putCharSequence("tel",tel);bundle.putCharSequence("site1",site1);bundle.putCharSequence("site2",site2);bundle.putCharSequence("site3",site3);intent.putExtras(bundle);startActivity(intent);}else{Toast.makeText(MainActivity.this,"请将地址填写完整!",Toast.LENGTH_SHORT).show();}}});}}7.1建立、配置和使用Activity第二个Activity中,布局文件activity_result.xml代码如下:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/name"android:paddingBottom="10sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/tel"android:layout_below="@id/name"android:paddingBottom="10sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/site"android:layout_below="@id/tel"</RelativeLayout>7.1建立、配置和使用Activity该界面布局对应的Java代码如下:publicclassResultActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_result);Intentintent=getIntent();Bundlebundle=intent.getExtras();Stringname=bundle.getString("name");Stringtel=bundle.getString("tel");Stringsite=bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3");TextViewname_=findViewById(R.);TextViewtel_=findViewById(R.id.tel);TextViewsite_=findViewById(R.id.site);name_.setText(name);tel_.setText(tel);site_.setText(site);}}7.1建立、配置和使用Activity运行结果如图7-2所示。7.2Activity的生命周期和启动模式7.2.1 Activity的生命周期演示1.Activity生命周期的过程02010403系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,使Activity进入运行状态。启动Activity系统会调用onResume方法,再次进入运行状态。当前Activity由被覆盖状态回到前台或解锁屏系统会调用onPause方法,暂停当前Activity的执行。当前Activity被其他Activity覆盖其上或被锁屏系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台7.2Activity的生命周期和启动模式2.Activity的三个关键循环整个生命周期从onCreate(Bundle)开始,到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。可见的生命周期从onStart()开始,到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管它有可能不在前台,不能和用户交互。前台的生命周期从onResume()开始,到onPause()结束。在这段时间里,该Activity处于所有Activity的最前面,和用户进行交互。Activity可以经常性地在resume和pause状态之间切换。7.2Activity的生命周期和启动模式【例7-3】Activity生命周期实现的过程。首先是两个Activity的程序,布局文件MainActivity代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/bt_btns"android:layout_width="130dp"android:layout_height="40dp"android:gravity="center"android:background="#ff0000"android:text="单击按钮"/></LinearLayout>7.2Activity的生命周期和启动模式其对应的Java代码如下:publicclassMainActivityextendsActivity{privateButtonbt_btn;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bt_btn=(Button)findViewById(R.id.bt_btns);bt_btn.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewarg0){Intentintent=newIntent();intent.setClass(MainActivity.this,MainActivity2.class);intent.putExtra("updateData","你要传的参数");startActivity(intent);}});System.out.println("onCreate");}@OverrideprotectedvoidonDestroy(){super.onDestroy();System.out.println("onDestroy");}@OverrideprotectedvoidonPause(){super.onPause();System.out.println("onPause");}@OverrideprotectedvoidonRestart(){super.onRestart();System.out.println("onRestart");}@OverrideprotectedvoidonResume(){super.onResume();System.out.println("onResume");}@OverrideprotectedvoidonStart(){super.onStart();System.out.println("onStart");}@OverrideprotectedvoidonStop(){super.onStop();System.out.println("onStop");}}7.2Activity的生命周期和启动模式另外一个Activity文件MainActivity2代码如下:publicclassMainActivity2extendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);this.setTitle("我是第二个Act!");}}7.2Activity的生命周期和启动模式运行结果如图7-3所示。7.2Activity的生命周期和启动模式7.2.2 Activity的四种启动模式standard标准模式,系统默认模式每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。在这个模式下,谁启动了Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中。singleTop栈顶复用模式在这种模式下,如果新的Activity已经位于任务栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被回调,通过此方法的参数我们可以取出当前的请求信息。singleTask栈内复用模式这是一种单例模式,在这种模式下,只要Activity在一个栈中存在,那么无论几次启动此Activity都不会创建实例,和singleTop一样,系统也会调用onNewIntent。还有一点,就是singleTask有clearTop的效果,会导致栈内已有的Activity全部出栈。singleInstance单实例模式这是一种加强的singleTask模式,它除了具有singleTask的所有特性以外,还加强了一点,那就是具有此模式的Activity只能单独位于一个任务栈中,比如ActivityA是ingleInstance模式,当A启动后,系统会为它创建一个新的任务栈,然后A独自在这个新的任务栈中,由于栈内复用的特性,后续均不会创建新的Activity,除非这个独特的任务栈被系统销毁。7.2Activity的生命周期和启动模式给Activity指定启动模式方法一:通过AndroidMenifest.xml,代码如下:<activityandroid:name="com.ryg.chapter_1.SecondActivity"android:configChanges="screenLayout"android:label="@string/app_name"android:launchMode="standard"android:taskAffinity="com.ryg.task1"/>方法二:通过Intent中设置标志位来为Activity指定启动模式,代码如下:Intentintent=newIntent();intent.setClass(MainActivity.this,SecondActivity.class);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);*区别:首先,在优先级上,第二种方式优先级要高于第一种,当两种同时存在的时候,以第二种方式为准,第一种方式无法直接为Activity设置FLAG_ACTIVITY_CLEAR_TOP标识,而第二种方式无法为Activity指定singleInstance模式。7.3Fragment详解7.3.1 Fragment的生命周期(1)当一个Fragment被创建的时候,它会经历以下状态:onAttach()onCreate()onCreateView()onActivityCreated()(2)当这个Fragment对用户可见的时候,它会经历以下状态:onStart()onResume()(3)当这个Fragment进入“后台模式”的时候,它会经历以下状态:onPause()onStop()7.3Fragment详解(4)当这个Fragment被销毁了(或者持有它的Activity被销毁了),它会经历以下状态:onPause()onStop()onDestroyView()onDestroy()onDetach()就像Activitie一样,在以下的状态中,可以使用Bundle对象保存一个Fragment的对象。onCreate()onCreateView()onActivityCreated()Fragment的大部分状态都和Activitie很相似,但Fragment又有一些新的状态。onAttached()//当Fragment被加入Activity时调用onCreateView()//当Activity要得到Fragment的Layout时,调用此方法onActivityCreated()//当Activity的onCreated()方法返回后调用此方法onDestroyView()//当Fragment中的视图被移除的时候,调用这个方法。onDetach()//当Fragment和Activity分离的时候,调用这个方法。7.3Fragment详解7.3.2 创建Fragment1.创建Fragment类【例7-4】定义一个Fragment的布局,代码如下:publicclassArticleFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//在这里定义Fragment的布局returninflater.inflate(R.layout.activity_article_fragment,container,false);}}7.3Fragment详解2.使用XML布局代码向Activity添加Fragment【例7-5】在屏幕比较大的情况下,在Activity上添加两个Fragment(在路径名中带有large的修饰符)。布局代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><fragmentandroid:name="com.example.a732.ArticleFragment"android:id="@+id/headlines_fragment"android:layout_weight="1"android:layout_width="0dp"android:layout_height="match_parent"/><fragmentandroid:name="com.example.a732.ArticleFragment"android:id="@+id/article_fragment"android:layout_weight="2"android:layout_width="0dp"android:layout_height="match_parent"/></LinearLayout>7.3Fragment详解Java代码如下:publicclassMainActivityextendsFragmentActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}}7.3Fragment详解以上运行结果如图7-4所示。7.3Fragment详解7.3.3 Fragment与Activity的通信过程方式
1:可以通过getSupportFragmentManager()拿到FragmentManager,然后通过FragmentManager的findFragmentByTag或者findFragmentById拿到需要通信的Fragment(比如说在下面的DEMO中我们用的是FragmentTabHost,所以就使用findFragmentByTag拿到Fragment,如果Fragment是直接在XML中定义的,那么就使用findFragmentById拿到Fragment),然后就可以对拿到的Fragment进行各种操作了。方式2:为了降低代码之间的耦合,我们可以通过回调实现Fragment之间的通信。7.3Fragment详解【例7-6】Fragment与Activity的通信过程。main.xml代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="horizontal"><LinearLayoutandroid:id="@+id/left_layout"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="1"android:orientation="vertical"></LinearLayout><LinearLayoutandroid:id="@+id/right_layout"android:layout_width="wrap_content"android:layout_height="fill_parent"android:layout_weight="10"android:orientation="vertical"></LinearLayout></LinearLayout>7.3Fragment详解leftfragment.xml代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/first_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="first_button"/><Buttonandroid:id="@+id/second_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="second_button"/><Buttonandroid:id="@+id/third_button"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="third_button"/></LinearLayout>7.3Fragment详解rightfragment.xml代码如下:<LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/right_show_message"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="@android:color/holo_orange_dark"android:textColor="@android:color/white"/></LinearLayout>7.3Fragment详解FirstActivity.java代码如下:publicclassFirstActivityextendsActivityimplementsLeftFragment.MyListener{publicvoidshowMessage(intindex){if(1==index)showMessageView.setText("第一页");if(2==index)showMessageView.setText("第二页");if(3==index)showMessageView.setText("第三页");}/**得到RightFragment中显示信息的控件*/privateTextViewshowMessageView;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);System.out.println("Activity--->onCreate");FragmentManagermanager=getFragmentManager();FragmentTransactiontransaction=manager.beginTransaction();//动态增加FragmentRightFragmentrightFragment=newRightFragment();LeftFragmentleftFragment=newLeftFragment();transaction.add(R.id.left_layout,leftFragment,"leftfragment");transaction.add(R.id.right_layout,rightFragment,"rightfragment");mit();}@OverrideprotectedvoidonResume(){super.onResume();System.out.println("Activity--->onResume");showMessageView=(TextView)findViewById(R.id.right_show_message);}}7.3Fragment详解LeftActivity.java代码如下:publicclassLeftFragmentextendsFragment{publicinterfaceMyListener{publicvoidshowMessage(intindex);}privateMyListenermyListener;privateButtonfirstButton;privateButtonsecondButton;privateButtonthirdButton;/**Fragment第一次附属于Activity时调用,在onCreate之前调用*/@OverridepublicvoidonAttach(Activityactivity){super.onAttach(activity);System.out.println("LeftFragment--->onAttach");myListener=(MyListener)activity;}@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInsta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共设施管理与维护操作手册(标准版)
- 车站人员考勤管理制度
- 财务管理制度
- 办公室员工培训课程更新制度
- 办公室出差与报销管理制度
- 2026年锡山城发集团公开招聘5人备考题库及完整答案详解1套
- 人教版初中语文七下《骆驼祥子》基础复习必刷题(附答案)
- 2026年葫芦岛市南票区政府专职消防队员招聘37人备考题库及参考答案详解一套
- 关于选聘“警民联调”室专职人民调解员20人的备考题库参考答案详解
- 2026年灵台县人民法院招聘备考题库有答案详解
- 2025年体育教师个人年终述职报告
- 实际问题与一次函数课件2025-2026学年人教版八年级数学下册
- 2025年天津科技大学毛泽东思想和中国特色社会主义理论体系概论期末考试模拟题及答案1套
- 2024年盐城市体育局直属事业单位招聘真题
- 南方航空安全员培训
- 2025-2026学年岭南美版(新教材)初中美术七年级上册期末综合测试卷及答案
- DB11∕T 2398-2025 水利工程巡视检查作业规范
- 2025秋国家开放大学《政府经济学》期末机考精准复习题库
- 2025-2026学年教科版(新教材)二年级上册科学全册知识点梳理归纳
- MDT在老年髋部骨折合并症患者中的应用策略
- PCB设计规范-MD元器件封装库尺寸要求
评论
0/150
提交评论