一直就想写写博客。把最近学到的新东西记录一下,方便以后的翻阅。IT技术的发展真的是日新月异,一些新的技术出来之后,一般要过很久才能在市面上买到相关的中文书籍。对于Android这样的移动平台来说,发展的速度更是相当迅速。现在市面能买到Android3.0以上的开发书籍真的很少。其实这完全没有必要的,只要你有良好的Java基础。学习Android开发,直接去看官方文档就OK了。那里才是最权威了。
从Android3.0开始,引用了Fragment这样一个新的东西,先来看下Fragment的定义:
A Fragment
represents a behavior or a portion of user interface in an Activity
. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section of an activity, which has its own lifecycle, receives its own input events, and which you can add or remove while the activity is running (sort of like a "sub activity" that you can reuse in different activities).
其实说白了,就是Activity的一个子集。Fragment也有自己的生命周期,比Activity多出好几个。Fragment也可以使用layout.xml的文件来创建一个界面,但是不同于Activity,Fragment是通过在onCreateView中加载布局文件。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.histories_list_layout, container,false); }
其中第二个参数container是指的父类视图,第三个参数是一个boolean值,它是值是否将其插入到父类界面中,该值一般为false,因为系统在inflate的时候,已经将它插入到了父类界面中,如果为true的话。它会重复插入父类界面。
在Fragment中也可以和Activity组建交互,例如获得一个Button,则可以通过findViewById()获得,不过要注意的是,必须通过getActivity()方法先获得该Fragment所在的Activity,而且必须在onActivityCreated()周期才能这样做。因为Fragment是先于Activity被创建的。如果在Fragment的onCreate()周期就去试图获取Activity组件的话,那样必定会报NullException。
public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); editText = (EditText)getActivity().findViewById(R.id.edit); listView = (ListView)getActivity().findViewById(R.id.histories_list); }
要在Activity中创建一个Fragment可以有两种方法,第一种是,在Activity的layout.xml布局文件中创建
<fragment class="com.wayne.searcher.SearchBar" android:id="@+id/search_bar" android:layout_width="match_parent" android:layout_height="wrap_content"/>
其中class必须指定到所要创建的Fragment类.当Activity加载其布局文件时,就是根据这个class自动生成这个类的时候,其实这种方式就像Spring里面的bean一样。第二种方式是在Activity中,通过FragmentManager管理一个Fragment。
HistoriesList historiesList = new HistoriesList(); FragmentTransaction t = getFragmentManager().beginTransaction(); t.add(R.id.contianer, historiesList); t.commit();
R.id.contianer是Activity的layout.xml文件的 <FrameLayout android:id="@+id/contianer"/>值。意思是将该Fragment加到container的位置。使用FragmentManager可以动态添加替换或者删除一个Fragment,从而实现 dynamic and flexible UI design。我觉得这一点更新是相当强大和实用的。可以使APP更加丰富。
t.replace(R.id.fragment_container, newFragment); t.addToBackStack(null); //将替换的Fragment放入一个栈中,按下返回键可以返回到之前的Fragment t.commit();
ActionBar也是在Android3.0中新引入的。实用ActionBar很简单,只要在Activity中加载其布局文件就可以
public boolean onCreateOptionsMenu(Menu menu) { // 在这里加载布局文件 getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: Intent intent = new Intent(this, Settings.class); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } }
<!--R.menu.activity_main布局文件,放在menu目录下--> <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_settings" android:title="@string/menu_settings" android:icon="@drawable/ic_menu_preferences" android:showAsAction="ifRoom"/> <!--如果有空间就显示--> <item android:id="@+id/menu_about" android:title="@string/menu_about" android:showAsAction="ifRoom|withText"/> </menu>
ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); //返回导航
//ActionBar点击触发事件 public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: //当点击的是返回导航键时 Intent intent = new Intent(this, Main.class); intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); this.finish(); return true; default: return super.onOptionsItemSelected(item); } } }
相关推荐
Fragment和ActionBar都是Android3.0之后出现的,Fragment,碎片,主要是为了支持更多的UI设计在大屏幕设备上,如平板。因为现在设备的屏幕越来越大,使用Fragment可以更灵活的管理视图层次的变化。像Activity一样,...
android actionbar切换fragment demo
Android 使用Fragment,ActionBar 实现tab标签切换页面的一个简单样例
本文介绍ActionBar与Fragment结合使用的一个实例,ActionBar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。
上一篇文章介绍了ActionBar的使用,这里介绍ActionBar的另一种使用方法,达到的效果和以前的GroupActivity或TabHost是一样的,可作为导航来使用。
Fragment ViewPager actionBar FragmentPagerAdapter ActionBar.Tab
ViewPager+Fragment+ActionBar Demo
Android Fragment的使用。 功能:用一个Activity来管理两个Fragment,并且在其中一个Fragment中,点击按钮,影响到第二个Fragment。Activity中用list来管理Fragment。fragment布局采用垂直排列。
Fragment 和Viewpager,ActionBar运用
androidx-fragment-1.1.0.aar
Fragment的概念是从Android3.0开始引入的,直译为碎片、片段,目的是为不同屏幕大小的设备(手机、平板等)创建灵活动态的UI。诚如其名,你可以把Fragment当作是Activity的模块化组件,它拥有自己的生命周期和UI,接受...
Fragment,ViewPager+actionBar运用
android studio popwindow fragment,实现按钮点击切换界面
Android Studio动态加载Fragment和获取实例的方法
在android3.0级以上版本中有一个新的组件ActionBar,通过它来控制导航栏既方便又直观.
Android 3.0以上开发 Fragment 结合ViewPager ActionBar 和Loader
android fragment 使用以及嵌套使用 底部菜单和顶部菜单,类似微信和QQ的分页菜单
android ViewPagerr嵌套Fragment 动态删除 动态插入,完美实现动态删除和插入,Fragment懒加载,可适用于各版本。the sample of android viewpager daynmic update or delete
ActionBar和Fragment结合ViewPager实现TabActivity
后来通过种种方法得以解决了,所以想着总结下这个问题的解决方法,以及Android中Fragment的管理,方便自己也给有需要的朋友们提供以帮助,感兴趣的朋友们下面通过这篇文章一起来学习学习吧。