其它推荐:

[原创]android版本飞鸽传书源码(附图)

Android植物大战僵尸对战版源码


实用源码——Android屏幕锁源码

Fragments 诞生初衷
  自从Android 3.0中引入fragments 的概念,根据词海的翻译可以译为:碎片、片段。其上的是为了解决不同屏幕分辩率的动态和灵活UI设计。大屏幕如平板小屏幕如手机,平板电脑的设计使得其有更多的空间来放更多的UI组件,而多出来的空间存放UI使其会产生更多的交互,从而诞生了fragments 。fragments 的设计不需要你来亲自管理view hierarchy 的复杂变化,通过将Activity 的布局分散到frament 中,可以在运行时修改activity 的外观,并且由activity 管理的back stack 中保存些变化。
  Fragments 设计理念
  在设计应用时特别是Android 应用 ,有众多的分辨率要去适应,而fragments 可以让你在屏幕不同的屏幕上动态管理UI。例如:通讯应用程序(QQ),用户列表可以在左边,消息窗口在右边的设计。而在手机屏幕用户列表填充屏幕当点击某一用户时,则弹出对话窗口的设计,如下图:

Fragments的生命周期
  每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件。 对应生命周期可参考下图:

其中大多数程序必须使用Fragments 必须实现的三个回调方法分别为:
  onCreate
  系统创建Fragments 时调用,可做执行初始化工作或者当程序被暂停或停止时用来恢复状态,跟Activity 中的onCreate相当。
  onCreateView
  用于首次绘制用户界面的回调方法,必须返回要创建的Fragments 视图UI。假如你不希望提供Fragments 用户界面则可以返回NULL。
  onPause
  当用户离开这个Fragments 的时候调用,这时你要提交任何应该持久的变化,因为用户可能不会回来。更多的事件可以参考上图的生命周期关系图。
  Fragments 的类别
  系统内置了三种Fragments ,这三种Fragments 分别有不同的应用场景分别为:
  DialogFragment
  对话框式的Fragments,可以将一个fragments 对话框并到activity 管理的fragments back stack 中,允许用户回到一个前曾摒弃fragments.
  ListFragments
  类似于ListActivity 的效果,并且还提供了ListActivity 类似的onListItemCLick和setListAdapter等功能。
  PreferenceFragments
  类似于PreferenceActivity .可以创建类似IPAD的设置界面。
  Fragments 的详细使用
  首先先来看一张DEMO 效果图:

左边点击时,右边的字符会与左边选中的项的字符相同。与IPAD上的设置界面很相似,这一点是否借鉴了ipad 上的UI呢?
  相就的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><fragment class="com.xuzhi.fragment.FragmentDemoActivity$TitlesFragment" android:id="@+id/titles" android:layout_weight="1"android:layout_width="0px" android:layout_height="match_parent"/><FrameLayout android:id="@+id/details" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent"android:background="?android:attr/detailsElementBackground"></FrameLayout>
</LinearLayout>

主界面代码(己做注释):

package com.xuzhi.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.ListFragment;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;public class FragmentDemoActivity extends Activity {public static String[] array = { "text1,", "text2", "text3", "text4","text5,", "text6", "text7", "text8" };/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.main);}public static class TitlesFragment extends ListFragment {boolean mDualPane;int mCurCheckPosition = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);System.out.println("Fragment-->onCreate");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubSystem.out.println("Fragment-->onCreateView");return super.onCreateView(inflater, container, savedInstanceState);}@Overridepublic void onPause() {// TODO Auto-generated method stubsuper.onPause();System.out.println("Fragment-->onPause");}@Overridepublic void onStop() {// TODO Auto-generated method stubsuper.onStop();System.out.println("Fragment-->onStop");}@Overridepublic void onAttach(Activity activity) {// TODO Auto-generated method stubsuper.onAttach(activity);System.out.println("Fragment-->onAttach");}@Overridepublic void onStart() {// TODO Auto-generated method stubsuper.onStart();System.out.println("Fragment-->onStart");}@Overridepublic void onResume() {// TODO Auto-generated method stubsuper.onResume();System.out.println("Fragment-->onResume");}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();System.out.println("Fragment-->onDestroy");}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onActivityCreated(savedInstanceState);System.out.println("Fragment-->onActivityCreted");setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, array));View detailsFrame = getActivity().findViewById(R.id.details);mDualPane = detailsFrame != null&& detailsFrame.getVisibility() == View.VISIBLE;if (savedInstanceState != null) {mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); //从保存的状态中取出数据
            }if (mDualPane) {getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);showDetails(mCurCheckPosition);}}@Overridepublic void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);outState.putInt("curChoice", mCurCheckPosition);//保存当前的下标
        }@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {// TODO Auto-generated method stubsuper.onListItemClick(l, v, position, id);showDetails(position);}void showDetails(int index) {mCurCheckPosition = index; if (mDualPane) {getListView().setItemChecked(index, true);DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != index) {details = DetailsFragment.newInstance(mCurCheckPosition); //得到一个fragment 事务(类似sqlite的操作)FragmentTransaction ft = getFragmentManager().beginTransaction();ft.replace(R.id.details, details);//将得到的fragment 替换当前的viewGroup内容,add则不替换会依次累加ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);//设置动画效果ft.commit();//提交
                }} else {new AlertDialog.Builder(getActivity()).setTitle(android.R.string.dialog_alert_title).setMessage(array[index]).setPositiveButton(android.R.string.ok,null).show();}}}/*** 作为界面的一部分,为fragment 提供一个layout* @author terry**/public static class DetailsFragment extends Fragment {public static DetailsFragment newInstance(int index) { DetailsFragment details = new DetailsFragment();Bundle args = new Bundle();args.putInt("index", index);details.setArguments(args);return details;}public int getShownIndex() {return getArguments().getInt("index", 0);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubif (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(array[getShownIndex()]);return scroller;}}
}

注意:
  如果你想在Fragment 里面创建menu,则必须在onCreate的时候设置让它可以存在optionMenu才可以创建,代码为:

public static class DetailsFragment extends Fragment {@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setHasOptionsMenu(true);}
}

之后的操作即可以像平常Android的menu用法一样,代码为:

@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {// TODO Auto-generated method stubsuper.onCreateOptionsMenu(menu, inflater);menu.add("Menu 1a").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);menu.add("Menu 1b").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubToast.makeText(getActivity(), "index is"+getShownIndex()+" && menu text is "+item.getTitle(), 1000).show();return super.onOptionsItemSelected(item);}

更多详细的使用方法,请参考SDK和APIDEMO中相关的例子和解释。

Android Fragments 详细使用详细介绍相关推荐

  1. android webview详情,Android中的WebView详细介绍

    Android中WebView的详细解释: 1. 概念: WebView(网络视图)能加载显示网页,可以将其视为一个浏览器.它使用了WebKit渲染引擎加载显示网页. 2. 使用方法: (1).实例化 ...

  2. Android Studio ndk-Jni开发详细

    2019独角兽企业重金招聘Python工程师标准>>> Android Studio ndk-Jni开发详细入门,Aes加密demo 字数920 阅读13 评论0 喜欢0 Java ...

  3. Android 系统(152)---Android多线程:HandlerThread详细使用手册

    Android多线程:HandlerThread详细使用手册 前言 多线程的应用在Android开发中是非常常见的,常用方法主要有: 继承Thread类 实现Runnable接口 Handler As ...

  4. android:自己动手编译Android源码(超详细)

    自己动手编译Android源码(超详细) 涅槃1992 2016.06.20 02:12* 字数 4330 阅读 86819评论 89喜欢 339赞赏 7 在Android Studio代码调试一文中 ...

  5. android application 方法,Android Studio新建Android application配置的详细方法

    Android Studio如何新建Android application配置呢?下面是小编介绍的Android Studio新建Android application配置的详细方法,有需要的小伙伴一 ...

  6. Android webservice的用法详细讲解

    Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...

  7. android 摄像头参数,获取Android设备上的详细的摄像头信息

    原标题:获取Android设备上的详细的摄像头信息 如何获取Android设备上的详细的摄像头信息呢? 目前Samsung的Galaxy Tab和Nexus S均有前置摄像头,获取Android摄像头 ...

  8. 车辆保险详细说明举例介绍

    轉:http://blog.163.com/cheliang_baoxian/blog/static/180520164201111883859383/ 车辆保险详细说明举例介绍 交强险 交强险是法律 ...

  9. Android 短信数据库详细总结分析

    Android 短信数据库详细总结分析 短信 sms  文件 /data/data/com.android.providers.telephony/databases/mmssms.db  这个数据库 ...

  10. Android连接夜神模拟器详细步骤

    Android连接夜神模拟器详细步骤 做毕设用到了android stdio,好久不用也生疏了,记录一下. (1)打开并运行夜神模拟器, (2)打开命令行窗口,win+R,并输入cmd. (3)找到并 ...

最新文章

  1. 举例分析Linux动态库和静态库
  2. 查看linux服务器硬盘IO读写负载
  3. Matplotlib实例教程(九)热力图
  4. git gui怎么拉取项目代码_Git GUI使用方法【转】
  5. request请求在Struts2中的处理步骤
  6. 解决火狐https问题 安全连接问题
  7. python3读取本地_Python3 获取本机 IP
  8. 冒泡排序及其三种优化方案
  9. 基于SSD目标检测模型的人脸口罩识别
  10. 图解数字签名-数字证书-公钥加密-私钥签名原理
  11. nginx搭建flv、mp4流媒体服务器
  12. 【linux】分卷压缩
  13. 英语基本句型及一般时态
  14. 大地测量控制点坐标转换技术规范
  15. 自定义gii生成模块
  16. 微信小程序| Ngork内网传统+后台API通信例子
  17. 全国计算机照片怎么弄,证件照电子版怎么弄-制作证件照其实很简单,用excel就行,2分钟搞定...
  18. android 获取 meid 代码,Android 各个版本获取IMEI、MEID
  19. I-Deas TMG 培训资料 (10)
  20. js的for循环中return可以跳出循环,而使用forEach等不可以跳出循环

热门文章

  1. MySQL5.7安装步骤
  2. ETH Zurich提出新型网络「ROAD-Net」,解决语义分割域适配问题
  3. git同一项目使用多个远程仓库
  4. 也谈架构:百万pv项目与虚拟化
  5. zabbis监控mysql数据库
  6. 所谓的创业分享,都是一堆骗人骗己的谎言?
  7. lua用于ios开发
  8. 【ASP.NET】免费的WebConfig编辑工具
  9. CSS漂亮盒子(上)
  10. springboot集合jpa使用