今天接触到了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. CSU 1249 竞争性酶抑制剂和同工酶

    1249: 竞争性酶抑制剂和同工酶 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 109  Solved: 49 Description 人体内很多化学 ...

  2. Ubuntu 14.04 SNMP安装与配置

    http://blog.csdn.net/wang1144/article/details/51177260 http://blog.csdn.net/shanzhizi/article/detail ...

  3. 关于Github Pages

    迁移Github Pages 我稍微有一点强迫症,实在是忍受不了整洁的界面有一些推广的广告.正所谓博客平台不重要,重要的是要有干货,CSDN首页满屏的广告也就忍受了,但是自己的文章的页面有广告看着实在 ...

  4. 【翻译自mos文章】私有网络所用的协议 与 Oracle RAC

    说的太经典了,不敢翻译.直接上原文. 来源于: Network Protocols and Real Application Clusters (文档 ID 278132.1) PURPOSE --- ...

  5. Android旋转屏幕后国际化语言失效的解决的方法

    本文已同步至个人博客:liyuyu.cn 近期在项目中使用到了国际化多语言(英文+中文),但在使用时发现了一个问题.当屏幕旋转后.APP语言(中文)自己主动转换为了系统语言(英文).设置了Activi ...

  6. OOM框架AutoMapper基本使用(2)

    出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要 ...

  7. 织梦DedeCMS判断简略标题为空时则显示完整标题

    使用织梦DedeCMS系统程序开发网站中,我们会遇到很多因网页版面设计限定的宽度,使文章标题需要进行字数限制,通常做法是在a标签中加入一个title属性,让鼠标放上去的时候显示完整标题.但是标题被剪裁 ...

  8. 搭建专属于自己的Leanote云笔记本

    搭建专属于自己的Leanote云笔记本 Leanote 依赖 MongoDB 作为数据存储,下面开始安装 MongoDB: 下载 MongoDB 进入 /home 目录,并下载 MongoDB: cd ...

  9. WPF中Image控件的Source属性

    原文:WPF中Image控件的Source属性 imgBook 是一个Image控件,在后台代码中我想给它指定Source的属性.我先如下方式进行: Uri uri = new Uri(strImag ...

  10. react-native-swiper苹果正常显示,Android不显示

    在使用react-native-swiper时,最好不要放到(FlatList , SectionList,ListView,ScrollView 等)组件中,否则Android 可能不会正常显示图片 ...