今天接触到了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. 再谈CLR查找和加载程序集的方式

    原文:再谈CLR查找和加载程序集的方式 这是一个老问题,以前也有朋友写过一些文章介绍,但可能还不是很全面.我也多次被人问到,这里结合案例再次谈谈,希望对大家有所帮助. 本文范例代码可以通过这里下载 h ...

  2. Unity Camera中心点的偏移

    在VR 中,如果镜片的中心轴,和屏幕的中心轴不在一条线上, 就会出现无论如何调节IPD,看到的图像都不清晰,这时候,要修改Camera的投影矩阵, 只需要一句代码就能搞定: Camera.main.p ...

  3. Java基础学习总结(12)——一哈希编码HashCode

    一.哈希编码 现在是站在JAVA虚拟机的角度来看内存里面的布局,站在JAVA虚拟机的角度,在内存里面有好多好多个对象,这里用椭圆来代表一个个对象.一个程序运行起来的时候,可能会有很多个对象在内存里面分 ...

  4. Objective-C中的同步线程的锁

    概述 在多线程编程中往往会遇到多个线程同时访问共享的资源,这种情况我们需要通过同步线程来避免.也就是给线程加锁. 因为Objective-C是C语言的超集.,严格的来说是真超集.所以C语言当中的pth ...

  5. 为OLED屏添加GUI支持3:字库

    为OLED屏添加GUI支持3:字库 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN10 开发环境:MDK5.13 MCU:STM3 ...

  6. [Recompose] Refactor React Render Props to Streaming Props with RxJS and Recompose

    This lesson takes the concept of render props and migrates it over to streaming props by keeping the ...

  7. 为什么用卷积滤波,而不是非常easy的在频率领域内进行数据的频率处理

    卷积.为了更好的"动态"滤波. 问题来了.为什么用卷积滤波.而不是非常easy的在频率领域内进行数据的频率处理? 为了强调我觉得的答案,已经用blog标题给出了.卷积.为了更好的& ...

  8. java设计模式学习 ----- 单例模式(Singleton)

    单例模式(Singleton) 单例对象(Singleton)是一种经常使用的设计模式. 在Java应用中,单例对象能保证在一个JVM中,该对象仅仅有一个实例存在.单例模式也分三种:懒汉式单例.饿汉式 ...

  9. HDU 5379 Mahjong tree dfs+组合数学

    题意:给你一棵树来分配号码,要求是兄弟节点连续并且每一棵子树连续. 思路:因为要求兄弟和子树都是连续的,所以自己打下草稿就可以发现如果一个节点有3个或3个以上的非叶子结点,那么就无论如何也不能达到目的 ...

  10. jdbc参数传递

    1.jdbc请求设置 将查询结果第一列coupon_id,存放在couponId中; 将查询结果第二列code,存放在coupCode中 2.参数解释: couponId_#:表示查询结果中coupo ...