今天接触到了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. HDU 4923 Room and Moor (单调栈)

    题意: 给你一个A数列,让你求一个单调递增的B数列(0<=bi<=1),使得sum{(ai-bi)^2}最小. 思路: 很明显,如果A = 0...01...1,那么bi=ai即可. 可以 ...

  2. 洛谷—— P2419 [USACO08JAN]牛大赛Cow Contest

    https://www.luogu.org/problem/show?pid=2419 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, convenie ...

  3. 用react native 做的一个推酷client

    用react native 做的一个推酷client 仅供大家參考.仅仅为抛砖引玉.希望大家能以此来了解react.并编写出很多其它的优质的开源库,为程序猿做出贡献. 用的的组件: Navigator ...

  4. POJ 3670 Eating Together(LIS)

    Description The cows are so very silly about their dinner partners. They have organized themselves i ...

  5. C++学习笔记31,指向引用的指针(3)

    我们来看一个简单的指向引用的指针的样例. #include <iostream> using namespace std; int main(){ int x=10; int y=20; ...

  6. 如何下载最新版的 Adobe Flash Player

    如何下载最新版的 Adobe Flash Player 中国访客用代理访问下面的链接,否则会自动跳转到 https://www.flash.cn/ 当我们从 https://get.adobe.com ...

  7. SQL Search

    Press TAB to expand wildcard tab键之后,会自动展开,直接枚举表中所有的字段 根据名字查找存储过程,发现找不到 原因是,本地是一个备份库.服务器上通过sql source ...

  8. linux 不常用命令及命令组合

    lsof:list open files, sudo lsof | grep deleted:则列出虽然被删除,但还处于打开状态的文件.注意,这些文件占用的空间,只有在这些文件关闭时,才会被释放. m ...

  9. 2015北京网络赛 Couple Trees 倍增算法

    2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 q ...

  10. android事件学习

    一.android处理事件有两种形式. 1.基于监听的事件处理,就是通过setXxxListenter()进行处理的. 2.基于回调的事件处理,就是View类内部的onTouchEvent(),一般是 ...