通过Api可以发现原来使用用于构建普通应用程序的框架的一些类,比如TabActivity,ActivityGroup都已经不推荐使用了,转而替换成Fragment。今天我们就来看看如何使用Fragment来构建应用程序。
底部的BottomBar结合的是之前发出的一篇博客
下面是效果图:
我们再看下工程的目录:
这里对BottomBar就不解释了,主要讲下Fragment相关的。
首先你的界面需要继承自FragmentActivity,在它的布局文件中需要两个控件:
1.
屏幕底部的BottomBar
2.
BottomBar上方的RelativeLayout(用来切换显示各个Fragment)。
接下去你就可以针对每个界面分开写布局和代码了。
注释代码中都有,下面直接上代码:
MainActivity.java
/**
* This demo shows how to use FragmentActivity to build the frame of a common application.
* To replace the deprecated class such as TabActivity, ActivityGroup,and so on.
*
* 这个demo展示了如何使用FragmentActivity来构建应用程序的框架
* 可以使用这个来替代原来的TabActivity,ActivityGroup等等
*
* @author MichaelYe
* @since 2012-9-6
* @see http://developer.android.com/reference/android/app/Fragment.html
* @see http://developer.android.com/training/basics/fragments/index.html
* @see http://developer.android.com/guide/components/fragments.html
* */
public class MainActivity extends FragmentActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final BottomBar bottomBar = (BottomBar)findViewById(R.id.ll_bottom_bar);
bottomBar.setOnItemChangedListener(new OnItemChangedListener()
{
@Override
public void onItemChanged(int index)
{
showDetails(index);
}
});
bottomBar.setSelectedState(0);
// bottomBar.hideIndicate();//这个代码原来控制红色小图标的可见性
// bottomBar.showIndicate(12);
}
private void showDetails(int index)
{
Fragment details = (Fragment)
getSupportFragmentManager().findFragmentById(R.id.details);
switch(index)
{
case 0:
details = new FragmentExecute();
break;
case 1:
details = new FragmentLaunch();
break;
case 2:
details = new FragmentTeam();
break;
case 3:
details = new FragmentSearch();
break;
case 4:
details = new FragmentSetting();
break;
}
// Execute a transaction, replacing any existing
// fragment with this one inside the frame.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details, details);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
// ft.addToBackStack(null);//这行代码可以返回之前的操作(横屏的情况下,即两边都显示的情况下)
ft.commit();
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_login"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/ll_bottom_bar" />
<com.michael.widget.BottomBar
android:id="@+id/ll_bottom_bar"
android:layout_width="fill_parent"
android:layout_height="60dip"
android:layout_alignParentBottom="true" />
</RelativeLayout>
/**
* 需要使用不带参数的构造器,可以使用getActivity()替换context参数
* 否则屏幕在旋转的时候会抛出异常:
* Caused by: java.lang.InstantiationException:
* can't instantiate class com.michael.fragment.FragmentExecute; no empty constructor
*
* @see http://stackoverflow.com/questions/7016632/unable-to-instantiate-fragment
* */
public class FragmentExecute extends Fragment
{
public FragmentExecute()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
if (container == null)
{
// Currently in a layout without a container, so no
// reason to create our view.
return null;
}
LayoutInflater myInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = myInflater.inflate(R.layout.frag_execute, container, false);
return layout;
}
}
frag_execute.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="fill_parent"
android:layout_height="45dip"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:background="@drawable/bg_title_bar"
android:gravity="center" >
<Button
android:id="@+id/btn_back"
android:layout_width="70dip"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginBottom="5dip"
android:layout_marginLeft="8dip"
android:layout_marginTop="5dip"
android:background="@drawable/title_btn_back_selector"
android:text="@string/workbench_home_page"
android:textColor="@color/title_button_color_gray" />
<Button
android:id="@+id/btn_add"
android:layout_width="70dip"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:layout_marginBottom="5dip"
android:layout_marginRight="8dip"
android:layout_marginTop="5dip"
android:background="@drawable/title_btn_rect_selector"
android:text="@string/workbench_add_task"
android:textColor="@color/title_button_color_gray" />
<TextView
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerInParent="true"
android:gravity="center"
android:text="@string/workbench_title"
android:textColor="@color/title_color_white"
android:textSize="22sp" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="30sp"
android:text="@string/num_0"
/>
</RelativeLayout>
其它的Fragment也可以这样写。
使用Fragment有两个好处:
让手机和平板之间更好的显示,这个你可以参考API;
再就是有回退功能,addToBackStack(null);
加入这个方法,当你按返回键的时候,就可以实现界面的回退了(回到之前的Fragment)。
项目下载地址:
https://github.com/michaelye/DemoFragment
- 大小: 62.2 KB
- 大小: 67.4 KB
分享到:
相关推荐
Fragment,通过Api可以发现原来使用用于构建普通应用程序的框架的一些类,比如TabActivity,ActivityGroup都已经不推荐使用了,转而替换成Fragment。继承FragmentActivity
2016/10/18 构建基本MVP框架 开发过程中遇到的问题(可能导致程序无法运行的bug)及解决方案 当用户未登录时,点击购物车,登陆之后,程序闪退 出现问题 :NullPointerException 解决方案: 使用Fragment的延时加载(懒...
《JavaServer Faces 2.0完全参考手册》主要内容:搭建开发环境并构建JSF应用程序。理解JSF请求处理生命周期。使用Facelets视图声明语言、托管bean和JSF表达式语言(EL)。按照JSF导航模型声明一个页面,包括新的...
《JavaServer Faces 2.0完全参考手册》主要内容:搭建开发环境并构建JSF应用程序。理解JSF请求处理生命周期。使用Facelets视图声明语言、托管bean和JSF表达式语言(EL)。按照JSF导航模型声明一个页面,包括新的...
视图构建高保真混合应用程序。 适用于 Android 的 Turbo Native 提供了将启用的 Web 应用程序包装在本机 Android shell 中的工具。 它跨多个 Fragment 目标管理单个 WebView 实例,为您提供具有 Turbo 的所有客户端...
SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久...
13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 13.4.2 布局文件 13.4.3 菜单文件 13.4.4 描述文件 13.5 组件和进程寿命 13.5.1 活动生命周期 13.5.2 服务生命周期 13.5.3 接收程序...
13.4 处理程序示例驱动程序类 13.4.1 驱动程序活动文件 13.4.2 布局文件 13.4.3 菜单文件 13.4.4 描述文件 13.5 组件和进程寿命 13.5.1 活动生命周期 13.5.2 服务生命周期 13.5.3 接收程序...
由于许多 Android 设备没有库存的文件资源管理器,因此开发人员必须经常指导用户自己安装或构建一个。 aFileChooser 解决了这个问题。 特征: 完整的文件浏览器 简化GET_CONTENT意图创建 挂钩存储访问框架 确定 ...
客户端展示了基于androidOS的编程方法和框架,例如Acticity类、Fragment类的使用以及UI/Main线程和worker线程的分离。 客户端-服务器消息传输层基于TCP/IP协议实现消息封装、拆分和一些相关的传输机制。 演示 存储库...