android小技巧:在activity中实现与绑定的fragment的回调

看到标题你可能会想是一个多么高大上的技巧呢?其实很一般就是自定义回调函数.

首先我们知道activity之间的数据传递有几种方式:

一是startActivityForResut()启动一个activity,当栈顶activity 调用onActivityResult()并且 finish 掉时将会传递消息给启动该activity的父activity.

二是在使用Fragment时,通过setTargetFragment()和onActivityResult()方法实现两个fragment之间的数据传递.

上述两种方式对于操作传递复杂数据时会很有帮助,但是对于简单数据或者仅仅是唤醒某步操作,并且不一定在子activity或fragment(这里到子代表由父activity启动的下一个activity或fragment)finish掉时就进行操作很有帮助.

好了,白话了那么多不相干的,曾睡觉前写两行代码贴上让大家感受一下:

我这里首先创建了一个抽象类继承自V4扩展库的FragmentActivity来管理每个Fragment的创建

package com.example.icedcap.fragmentcallbackdemo;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

/**
 * Created by icedcap on 14-11-18.
 */
public abstract class SingleFragment extends FragmentActivity {

    public abstract Fragment createFragment();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        FragmentManager fm = getSupportFragmentManager();
        Fragment mFragment = fm.findFragmentById(R.id.container);
        if (mFragment == null){
            mFragment = createFragment();
            fm.beginTransaction().add(R.id.container, mFragment).commit();
        }

    }
}

这样我在主activity中只需继承该抽象类并且实现createFragment方法就能轻松创建一个Fragment并且将其添加到R.id.container容器上了.

    @Override
    public Fragment createFragment() {
        return new IndexFragment();
    }

对于Fragment很简单我只加了一个TextView和一个Button控件,当点击Button时,唤醒回调函数,使activity的回调函数进行工作.

package com.example.icedcap.fragmentcallbackdemo;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

/**
 * Created by icedcap on 14-11-18.
 */
public class IndexFragment extends Fragment {
    private IndexListener mListener;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_index, container, false);
        Button button = (Button) v.findViewById(R.id.index_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mListener.onIndexListener("Call Back to My Implementer");
            }
        });
        return v;
    }

    public interface IndexListener{
        public void onIndexListener(String str);
    }

    //初始化mListener
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (IndexListener) activity;
        }catch (ClassCastException e){
            throw new ClassCastException(activity.toString() + " must implement IndexListener");
        }
    }
}

在主activity完成回调函数的任务

package com.example.icedcap.fragmentcallbackdemo;

import android.support.v4.app.Fragment;
import android.util.Log;

public class MyActivity extends SingleFragment implements IndexFragment.IndexListener{
    private static final String TAG = "MyActivity";

    @Override
    public Fragment createFragment() {
        return new IndexFragment();
    }

    @Override
    public void onIndexListener(String str) {
        Log.d(TAG, "From the Fragment message: " + str);
    }
}

当点击Fragment中的Button时,Logcat会打印这样一句话:

From the Fragment message: Call Back to My Implementer

好了,代码结束!

这个例子看上去貌似没啥意义,但是对于一些应用场合还是很重要的,例如,在文件管理器中搜索功能,当键入一些字符串时,就会立即返回结果用户不必输入整个要查询的文件名称就能检索出结果来,正是利用EditText的addTextChangeListener事件并手动添加了后台检索方法的类来监听afterTextchange函数里所获取到底残缺字符串.

好了,弄明白监听对象和唤醒监听对象的两个类后使很容易写出简介易懂的代码的.

时间: 2024-10-03 22:40:30

android小技巧:在activity中实现与绑定的fragment的回调的相关文章

[小技巧] 在bash中生成随机数

译至:http://d.hatena.ne.jp/anmino/20091017/1255705586 bash的SHELL参数RANDOM可以生成0-32767的随机数.想设定从1到N的随机数范围的话,可以使用:$ ( ( (RANDOM % n) + 1 )) #!/bin/sh #random_bash.sh for n in 1 2 3 4 5 6 7 8 9 10; do random=$(( (RANDOM % 10) + 1 )) echo -n "$random " d

《企业云桌面实施》-小技巧-03-vSAN6.5中SAS和SSD的使用建议

<企业云桌面实施>-系列博文-陆续更新中 <企业云桌面实施>-小技巧-01-规划注意事项http://dynamic.blog.51cto.com/711418/1884922 <企业云桌面实施>-小技巧-02-使用ISO光驱安装esxi6.5http://dynamic.blog.51cto.com/711418/1885884 企业云桌面实施>-小技巧-03-vSAN6.5中SAS和SSD的使用建议http://dynamic.blog.51cto.com/7

activity中实现Spinner绑定

(1)需要一个主要的布局文件activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_pa

android 编程小技巧(持续中)

first: Intent跳转一般存用于Activity类,但是若要在非activity类里跳转的话,解决方法是在startActivity(intent)前加mContext即上下文,最终为:mContext.startActivity(intent);  换言之,以后在非activity类里调用activity的方法  一律这么做.若不行的话 可以这么做:(Activity)mContext. second: gridview中textview内容不能居中的问题.gridview中可以设置一

android小技巧(不定期更新)

国内转自http://androidperformance.com/ 国外 http://blog.danlew.net/about/ Activity.startActivities()) 常用于在应用程序中间启动其他的Activity. TextUtils.isEmpty()) 简单的工具类,用于检测是否为空 Html.fromHtml()) 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spanna

Android开发常见的Activity中内存泄漏及解决办法

上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以"为什么""怎么解决"的方式来介绍这几种内存泄漏. 在开篇之前,先来了解一下什么是内存泄漏. 什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是值由程序分配的内存但是由于程序逻辑错误而导致程序失去了对该内存的控制,使得内存浪费. 怎

android开发之在activity中控制另一个activity的UI更新

转自:http://blog.csdn.net/jason0539/article/details/18075293 第一种方法: 遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决. 1.在MyAPP中定义属性handler 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package jason.com;     import jas

android——如何从一个activity中退出程序

软件一运行起来,先是一个主Activity显示一张图片.然后用startActivity(Intent intent)方法打开另一个Activity.我想在这个Activity中让用户按返回键后,不返回到前一个Activity,而是弹出一个对话框,提示软件是否关闭. 这里有两个问题: 1.截取返回按键事件,屏蔽返回行为.只需要在程序里加入这段就好 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCod

PPT小技巧:PPT中怎么给文字添加描边效果

很多时候在色彩丰富的PPT中由于背景颜色的关系,文字往往并不能清晰呈现,这个时候我们需要给PPT中的文字添加描边效果,这样突出需要显示的文字了.想必大家一般给文字添加描边效果都是在PS中进行操作的吧,今天给大家安利一个PPT小技巧,在PPT中给文字添加描边效果.第一步:打开PPT文件新建一个空白页面.第二步:插入文本框,并在上方输入"1,2,3".第三步:点击绘图工具.第四步:找到导航栏上的"文本轮廓"并点击.第五步:调整文字的描边颜色.第六步:调整文字的描边粗细.