Android开发中的Fragment和Acitvity通信

上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信。如果上一篇还有不懂得,可以再看一下。传送门。

Fragment与Activity通信的方式如下:

一、通过初始化函数提供

1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;

2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。

二、创建回调接口

比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。

首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。

下面我给出Fragment1的代码:

package com.example.fragment;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

import com.example.fragmentdemo.R;

public class Fragment1 extends Fragment {

    private static final String TAG = "FragmentDemo";
    private OnButtonClickListener mListener;

    /**
     * 这里我们创建一个回调接口
     *
     * @author Myp
     *
     */
    public interface OnButtonClickListener {
        public void onButtonClicked();
    }

    @Override
    public void onAttach(Activity activity) {
        Log.v(TAG, "Fragment1 onAttach");
        Bundle args = getArguments();
        if (null != args) {
            /*
             * 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。
             */
            Log.d(TAG,
                    "Fragment1 Get data from activity "
                            + args.getString("hello"));
        }

        try {
            mListener = (OnButtonClickListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnButtonClickListener");
        }
        super.onAttach(activity);
    }

    @Override
    public void onInflate(Activity activity, AttributeSet attrs,
            Bundle savedInstanceState) {
        Log.d(TAG, "onInflate");
        super.onInflate(activity, attrs, savedInstanceState);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.v(TAG, "Fragment1 onCreate");
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onDestroy() {
        Log.v(TAG, "Fragment1 onDestroy");
        super.onDestroy();
    }

    @Override
    public void onResume() {
        Log.v(TAG, "Fragment1 onResume");
        super.onResume();
    }

    @Override
    public void onStart() {
        Log.v(TAG, "Fragment1 onStart");
        super.onStart();
    }

    @Override
    public void onDetach() {
        Log.v(TAG, "Fragment1 onDetach");
        super.onDetach();
    }

    @Override
    public void onPause() {
        Log.v(TAG, "Fragment1 onPause");
        super.onPause();
    }

    @Override
    public void onStop() {
        Log.v(TAG, "Fragment1 onStop");
        super.onStop();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        Log.v(TAG, "Fragment1 onCreateView");
        View view = inflater.inflate(R.layout.fragment1, container, false);
        // 为button注册事件,并且调用回调接口,将信息返回给上层
        view.findViewById(R.id.fragment1_btn).setOnClickListener(
                new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        mListener.onButtonClicked();
                    }
                });
        return view;
    }

    @Override
    public void onDestroyView() {
        Log.v(TAG, "Fragment1 onDestroyView");
        super.onDestroyView();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.v(TAG, "Fragment1 onActivityCreated");
        super.onActivityCreated(savedInstanceState);
    }

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索fragment
, 安卓 fragment
, fragment 筛选
, fragment地图
, fragment跳转
, fragment+离线定位
, android bundle
, activity交互fragment
, android fragment
, import
, fragment 标题
, override
, public
, savedinstancestate
void
android fragment通信、android开发fragment、android usb通信开发、android即时通信开发、android wifi通信开发,以便于您获取更多的相关知识。

时间: 2024-12-10 07:54:09

Android开发中的Fragment和Acitvity通信的相关文章

Android 开发中fragment预加载问题

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源.这样的结果,我们当然不会满意.那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 答案就在Fragment里的setUserVisibleHint这个方法里.请看关于Fragment里这个方法的API文档(国内镜像地址:ht

Android开发中的MVC设计模式浅析_Android

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

Android开发中的MVC设计模式浅析

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

Android开发中Eclipse报错及对应处理方法总结_Android

本文较为详细的总结了Android开发中Eclipse报错及对应处理方法.分享给大家供大家参考,具体如下: 报错1: Conversion to Dalvik format failed with error 1 报错原因:原因是我在android工程中不小心多导入Java的mina,结果一跑程序就报这个错误. 解决方法:将Java中用到的mina包移除,就OK了. 小结:以后遇到这种报错时,记得提醒自己可能是由于自己导错包了. 附: 网上其他处理方法:<丢失Android系统库或者Conver

百度地图-在android开发中使用百度LBS定位服务无法稳定准确获得地理位置

问题描述 在android开发中使用百度LBS定位服务无法稳定准确获得地理位置 程序代码如下所示,我是仿照网上的实例编写的,在manifests文件中已经添加了识别码以及百度定位的service,权限也按照百度的说明文档添加好了,在虚拟机中运行效果为无法获取地理位置,错误码62,真机运行则毫无反应,我完全找不到是什么地方出了问题,哪位大大可以帮我看一下吗? import android.os.Bundle; import android.support.v4.app.Fragment; impo

Android开发中的多线程编程技术

Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的"麻烦"源于它很抽象.与单线程程序运行模式不同,但只要掌握了它们的区别,编写多线程程序就会很容易了.下面让我们集中精力开始学习吧! 多线程案例--计时器 我在给我的学生讲多线程的时候都会举一个计时器的案例,因为计时器案例是多线程的经典应用. 这个案例中,屏幕启动之后,进入如图8-1所示的界面.

安卓应用开发-android开发中的socket问题

问题描述 android开发中的socket问题 如何用socket开发程序能让两台或更多安卓设备通信,需要一台手机做服务器,手机用socket做服务器好难,具体怎么实现,有没有代码给我参考一下? 解决方案 Android的socket不就是java的socket么,比如说应用什么快传就是开wifi热点然后用socket啊 解决方案二: Android开发手记:Socket网络通信 解决方案三: 手机没有做socket服务器的先例,也不适合,socket需要一直监听,对手机耗电太多.建议还是用电

Android开发中的MVP架构

最近越来越多的人开始谈论架构.我周围的同事和工程师也是如此.尽管我还不是特别深入理解MVP和DDD,但是我们的新项目还是决定通过MVP来构建. 这篇文章是我通过研究和学习各种文章以及专题讨论所总结出来的,它包括以下几点: 为什么越来越多的人开始关注架构? 首先,MVP是什么? 哪种架构才是最好的,MVC,MVVM还是MVP? MVP的利与弊 Show me the code!!!代码展示 不幸的,这篇文章将不包括: 详细生动的代码示例 如何编写测试代码 最后,我将告诉你如何更进一步学习这些专题.

Android开发中Intent用法总结_Android

本文实例讲述了Android开发中Intent用法.分享给大家供大家参考,具体如下: Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一个标志性的对象. 当一个Activity要启动另外一个Activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动.这种方式简洁.明了,但是却违背了Android开发的理念.Andro