今天接触到了fragment,在网上看到了它的使用方法。现在把它的创建跟使用记录下,方便以后查询。

1.创建一个自己的fragment,继承自fragment

package com.android.calculator2;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils; public class HistoryFragment extends Fragment {
private View mView;
private ListView mListView;
private Button mClearHistoryBtn;
private Button mBackCalculatorBtn;
private HistoryAdapter mHistoryAdapter;
private Animation myAnimationIn;
private Animation myAnimationOut; public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.history_display, container, false);
myAnimationIn = AnimationUtils.loadAnimation(getActivity(), R.anim.history_fragment_in_anim);
myAnimationOut = AnimationUtils.loadAnimation(getActivity(),R.anim.history_fragment_out_anim);
myAnimationIn.setFillAfter(true);
myAnimationOut.setFillAfter(true);
if (mView != null) {
mView.startAnimation(myAnimationIn);
mClearHistoryBtn = (Button) mView.findViewById(R.id.history_clear);
mBackCalculatorBtn = (Button) mView.findViewById(R.id.history_back);
mListView = (ListView) mView.findViewById(R.id.history_list);
if (getActivity() instanceof HistoryClickListener) {
mHistoryAdapter = ((HistoryClickListener) getActivity()).getHistoryAdapter();
}
mListView.setAdapter(mHistoryAdapter);
mBackCalculatorBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
if (getActivity() instanceof HistoryClickListener) {
((HistoryClickListener) getActivity()).historyClickHide();
} }
});
mClearHistoryBtn.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (getActivity() instanceof HistoryClickListener) {
((HistoryClickListener) getActivity()).historyClickClear();
} }
}); return mView;
} else {
return super.onCreateView(inflater, container, savedInstanceState);
} } public interface HistoryClickListener {
void historyClickHide();
void historyClickClear();
HistoryAdapter getHistoryAdapter();
}
@Override
public void onDestroyView() {
if (mView != null) {
mView.startAnimation(myAnimationOut);
}
super.onDestroyView();
}
}

然后在代码中使用

                FragmentManager mHistoryFm = getFragmentManager();
FragmentTransaction mHistoryTx = mHistoryFm.beginTransaction();
mHistoryTx.replace(R.id.frame_layout, mHistoryFragment, "history");
mHistoryTx.addToBackStack(null);
mHistoryTx.commit();

它的使用也很简单。只需要创建,然后在activity中加载到一个布局里面就行了。

有以下几点需要注意

1.你必须在activity的xml中分配一个布局容器给你的fragment,就是方法里面的

mHistoryTx.replace(R.id.frame_layout, mHistoryFragment, "history");

R.id.frame_layout

2.如果你想移除一个fragment,你必须拥有这个fragment的实例,也就是

mHistoryTx.replace(R.id.frame_layout, mHistoryFragment, "history");
mHistoryTx.remove( mHistoryFragment);

上面的两个mHistoryFragment是同一个实例

3.尽量让fragment中事件的处理,交给activity来处理。常用的方法就是

在fragment想要实现的操作,定义为一个接口,然后在activity中实现这个接口

定义接口

    public interface HistoryClickListener {
void historyClickHide();
void historyClickClear();
HistoryAdapter getHistoryAdapter();
}

实现接口

public class Calculator extends Activity implements Logic.Listener, HistoryClickListener{

    @Override
public void historyClickHide() {
android.util.Log.e("zhangshuli", "mmmm");
FragmentManager mHistoryFm = getFragmentManager();
FragmentTransaction mHistoryTx = mHistoryFm.beginTransaction();
mHistoryTx.remove(mHistoryFragment);
mHistoryTx.commit();
} @Override
public void historyClickClear() {
android.util.Log.e("zhangshuli", "nnnn");
mHistory.clear();
mLogic.onClear();
} @Override
public HistoryAdapter getHistoryAdapter() {
return mAdapter;
} }

在fragment中回调activity中的方法

if (getActivity() instanceof HistoryClickListener) {
((HistoryClickListener) getActivity()).historyClickClear();
}

fragment-实例创建跟使用的更多相关文章

  1. Fragment基础----创建

    1,Fragment的目的及应用场景 fragment 是3.0后引入的类,其字面翻译为“碎片”. 目的是将activity划分成许多单元再进行组合,可以根据不同分辨率屏幕,在不同状态下,灵活创建优化 ...

  2. Android-为何以及如何保存Fragment实例

    在安卓开发中,由于旋转设备会造成配置改变进而导致Activity实例被摧毁(当然也包括Activity托管的Fragment).Activity或Fragment实例被摧毁自然也就让Model被摧毁, ...

  3. android studio 2.2.2下fragment的创建和跳转

    一,首先,Fragment是android应用中十分重要的一个功能,十分轻量化,也类似于activity一样,是一个个布局,可以相互跳转和传递参数.但是,它运行起来十分流畅,而且易于管理,下面是在学习 ...

  4. [Java] 实例创建的步骤

    创建类的一个实例时,按照下面步骤进行创建: 1. 给当前类及其父.祖类的所有成员字段分配空间,并给它们赋予默认值 2. 开始执行当前类的构造器 3. 如果当前类有父类,则对父类创建一个实例:从第 2 ...

  5. DB2数据库实例创建与删除 学习笔记

    以root身份执行 $DB2HOME/instance/db2idrop -f 实例名,注意一定要加-f,否则不会删除实例下面sqllib文件.如果不幸忘了,执行db2icrt,会报sqllib文件存 ...

  6. android开发(2):多页面的实现 | Fragment的创建与使用

    APP中出现多个页面再常见不过了.使用activity与fragment都能实现多页面,这里使用fragment来实现.延续“知音”这个APP的开发,之前已经创建了底部导航条与mainactivity ...

  7. C 语言实例 - 创建各类三角形图案

    C 语言实例 - 创建各类三角形图案 创建三角形图案. 实例 - 使用 * 号 #include <stdio.h> int main() { int i, j, rows; printf ...

  8. Fragment的创建与通信

    由于这里涉及到接口回调的问题,所以先来看一看什么是接口回调: 这就好比老板和员工的微妙关系,老板需要员工去工作,员工挣钱了以后还要告诉老板自己挣了多少钱,然后由老板来处理这些钱. 首先创建一个接口: ...

  9. ALSA driver --PCM 实例创建过程

    前面已经写过PCM 实例的创建框架,我们现在来看看PCM 实例是如何创建的. 在调用snd_pcm_new时就会创建一个snd_pcm类型的PCM 实例. struct snd_pcm { struc ...

  10. Python利用元类来控制实例创建

    问题: 改变实例创建方式,以此来实现单例模式,缓存或者其他类似的特性. 解决方法: 如果想定制化创建实例的过程,可以通过定制一个元类并以某种方式重新实现它的__call__()方法. 使用元类的单例模 ...

随机推荐

  1. linux基础入门(二)命令

    原创作品,允许转载,转载时请务必声明作者信息和本声明. https://www.cnblogs.com/zhu520/p/10732334.html =[本人小白,有错指出.谢谢! 一:使用Secur ...

  2. 简单记录一次REDO文件损坏报错 ORA-00333重做日志读取块出错

    一.故障描写叙述 首先是实例恢复须要用到的REDO文件损坏 二.解决方法 1.对于非当前REDO或者当前REDO可是无活动事务使用下面CLEAR命令: 用CLEAR命令重建该日志文件SQL>al ...

  3. 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释

    组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...

  4. mysql二进制日志文件出错导致mysql服务无法启动

    今天打开phpmyadmin发现连不上mysql数据库,重新启动mysql启动不起来,查看日志发现例如以下错误 <span style="font-family:SimSun;font ...

  5. C# double保留四位小数

    2.保留N位,四舍五入 . decimal d= decimal.Round(decimal.Parse("0.55555"),4); 3.保留N位四舍五入 Math.Round( ...

  6. POJ 1610 Count the Colors

    Count the Colors Time Limit: 2 Seconds      Memory Limit: 65536 KB Painting some colored segments on ...

  7. 关于Echarts表格插件的使用

    <template> <div :style="{height:height,width:width}"></div> </templat ...

  8. which---查找并显示给定命令的绝对路径

    which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录.which指令会在环境变量$PATH设置的目录里查找符合条件的文件.也就是说,使用which命令,就可 ...

  9. 3D图形处理库

    转自 3D图形处理库 高性能软件光栅化渲染器 OpenSWR OpenSWR —— 用于OpenGL的高性能,高度可扩展的软件光栅化渲染器 OpenSWR的目的是提供一个高性能,高度可扩展的OpenG ...

  10. JavaWeb-04(BOM&amp;DOM)

    JavaWeb-04 JavaWeb-BOM&DOM BOM 一.知识回想 * BOM 概述 * BOM 的各个对象 * window对象 innerHeight,innerWidth doc ...