热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

FrameLayout和Fragment处理Android应用UI布局实例

这篇文章主要介绍了FrameLayout和Fragment处理Android应用UI布局实例,安卓3.0以后Fragment的出现为多尺寸屏幕的适配带来了方便,需要的朋友可以参考下

将Fragment与Layout结合使用,一般都是主Activity以frame填充Activity的方式交互管理Fragment :

1.由于用到getSupportFragmentManager()之类,所以主Activity的extends需为FragmentActivity:

  public class MainActivity extends FragmentActivity{
    ..........
  }

2.主Activity的layout(xml文件)中建立多个Frame并定义其Android:id="@+id/XXX"
3.主Activity内操作函数中,由查找id来对这些FrameLayout进行Activity填充:
   添加语句如下

代码如下:

   getSupportFragmentManager().beginTransaction().add(R.id.fragment_container2,new NullFrag()).commit();


   取得支持Fragment管理()->开始交易()->添加(frame的id , Fragment).交付(); 
   替换语句如下
   getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new NullFrag()).commit();
   取得支持Fragment管理()->开始交易()->替代(frame的id , Fragment).交付();
例:

代码如下:

    public void click_btn_flag02(View view){
         getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container2,new MidFrag()).commit();
    }


注:函数参数要用View

下面我们来看实例:

2016225112753148.gif (800×600)
效果图的左边是一个列表,右边是列表item的详情。
先看一下布局文件(layout):

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
  
  
 

        布局文件中使用了fragment标签和FrameLayout标签。Android Fragment使用 中介绍了2中嵌入Fragment的方法,这个实例中都用到,从布局文件看到有了fragment标签,这是一种使用方法,FrameLayout标签将会成为第二种加载fragment的载体view。
        看一下程序实现(com.fragment.main.TitlesFragment):

public class TitlesFragment extends ListFragment { 
 
 int mCurCheckPosition = 0; 
 int mShownCheckPosition = -1; 
 
 @Override 
 public void onActivityCreated(Bundle savedInstanceState) { 
  super.onActivityCreated(savedInstanceState); 
               
  setListAdapter(new ArrayAdapter(getActivity(), 
    android.R.layout.simple_list_item_activated_1, 
    Shakespeare.TITLES)); //使用静态数组填充列表 
  if (savedInstanceState != null) { 
   mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
   mShownCheckPosition = savedInstanceState.getInt("shownChoice", -1); 
  } 
   getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
   showDetails(mCurCheckPosition); 
 } 
 
 @Override 
 public void onSaveInstanceState(Bundle outState) { 
  super.onSaveInstanceState(outState); 
 
  outState.putInt("curChoice", mCurCheckPosition); 
  outState.putInt("shownChoice", mShownCheckPosition); 
 } 
 
 @Override 
 public void onListItemClick(ListView l, View v, int position, long id) { 
  showDetails(position); 
 } 
 
 /** 
  *显示listview item 详情 
  */ 
 void showDetails(int index) { 
  mCurCheckPosition = index; 
   getListView().setItemChecked(index, true); 
 
   if (mShownCheckPosition != mCurCheckPosition) { 
 
    DetailsFragment df = DetailsFragment.newInstance(index); 
    FragmentTransaction ft = getFragmentManager() 
      .beginTransaction(); 
    ft.replace(R.id.details, df); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.commit(); 
    mShownCheckPosition = index; 
   }  
 } 
 
} 

TitlesFragment
TitlesFragment继承自Fragment的子类ListFragment,使用了一个静态数组填充列表,重写了onListItemClick方法,showDetails方法展示ListView item的详情。

DetailsFragment df = DetailsFragment.newInstance(index);//获取详情Fragment的实例
FragmentTransaction ft = getFragmentManager().beginTransaction();//获取FragmentTransaction 实例
ft.replace(R.id.details, df); //使用DetailsFragment 的实例
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();//提交

看一下DetailsFragment :

public class DetailsFragment extends Fragment { 
 
 /**  * Create a new instance of DetailsFragment, initialized to  * show the text at 'index'.  */ 
 public static DetailsFragment newInstance(int index) { 
  DetailsFragment f = new DetailsFragment(); 
  // Supply index input as an argument.   
  Bundle args = new Bundle(); 
  args.putInt("index", index); 
  f.setArguments(args); 
  return f; 
 } 
 
 @Override 
 public View onCreateView(LayoutInflater inflater, ViewGroup container, 
   Bundle savedInstanceState) { 
  if (cOntainer== null) {    
   return null; 
  } 
  ScrollView scroller = new ScrollView(getActivity()); 
  TextView text = new TextView(getActivity()); 
 
  int padding = (int) TypedValue.applyDimension( 
    TypedValue.COMPLEX_UNIT_DIP, 4, getActivity().getResources() 
      .getDisplayMetrics()); 
  text.setPadding(padding, padding, padding, padding); 
  scroller.addView(text); 
  text.setText(Shakespeare.DIALOGUE[getArguments().getInt("index", 0)]); 
  return scroller; 
 } 
} 

 
DetailsFragment 中使用newInstance(int index)方法产生DetailsFragment 实例并接受整型参数,重载了onCreateView方法创建view。


推荐阅读
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 国内BI工具迎战国际巨头Tableau,稳步崛起
    尽管商业智能(BI)工具在中国的普及程度尚不及国际市场,但近年来,随着本土企业的持续创新和市场推广,国内主流BI工具正逐渐崭露头角。面对国际品牌如Tableau的强大竞争,国内BI工具通过不断优化产品和技术,赢得了越来越多用户的认可。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 深入理解 Oracle 存储函数:计算员工年收入
    本文介绍如何使用 Oracle 存储函数查询特定员工的年收入。我们将详细解释存储函数的创建过程,并提供完整的代码示例。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • CSS 布局:液态三栏混合宽度布局
    本文介绍了如何使用 CSS 实现液态的三栏布局,其中各栏具有不同的宽度设置。通过调整容器和内容区域的属性,可以实现灵活且响应式的网页设计。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了如何使用jQuery根据元素的类型(如复选框)和标签名(如段落)来获取DOM对象。这有助于更高效地操作网页中的特定元素。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
author-avatar
mobiledu2502918113
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有