• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android中Fragment与Activity之间的交互(两种实现方式),androidfragment

Android中Fragment与Activity之间的交互(两种实现方式),androidfragment

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了Android中Fragment与Activity之间的交互(两种实现方式),androidfragment等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android中Fragment与Activity之间的交互(两种实现方式),androidfragment


(未给Fragment的布局设置BackGound哭)

 

之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文《Android中Fragment的两种创建方式》,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的。

 

我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的。

 

Fragment与Fragment或者说与Activity(将部分Fragment包含的的布局直接部署在Activity中)的数据交互我个人总结了两种实现方式:

(1)通过Bundle传参,从而实现Fragment之间的数据交互

(2)通过在Fragment内部定义一个回调接口,并需要宿主Activity实现它。当Activity通过接口接收到回调时,可以在必要时与布局中的其它Fagment共享信息。

在开始两种实现方式之前,先向大家介绍并演示其中一些个性化参数不同设置后的效果,之前向大家介绍过要管理宿主Activity中的Fragment,必须得到FragmentManager(碎片管理),而FragmentManager要实现对Fragment的增删改换等操作(事务),则必须启用FragmentTransaction,这里主要向大家演示添加FragmentTransaction.addToBackStack方法前后以及在未给Fragment设置BackGround的情况下使用FragmentTransaction.add与replace的不同效果,更加详细的方法介绍以及用法请大家参照API详细了解。

未设置FragmentTransaction.addToBackStack方法演示效果(打开多层后,按回退,直接退出程序):

设置FragmentTransaction.addToBackStack方法演示效果(这里没有设置监听后台栈变化的监听器进行判断处理):

貌似看不出差别,其实在按回退键时,这个是根据打开的顺序,逐个退出

未给Fragment设置BackGround的情况下使用FragmentTransaction.add的演示效果:

注意啦注意啦,这里着重声明的是未给右侧Fragment的布局设置BackGound的情况,如果设置的BackGound,那么实现效果和replace没有差别,这也是今天超时这么多的主要原因哭

不同的实现效果大家都看到了,我们开始演示实现代码:

我们使用的是Android中Fragment的两种创建方式中(通过java代码将fragment添加到宿主Activity中)的布局文件,布局文件代码请参考http://www.cnblogs.com/panhouye/p/6185093.html

(1)通过Bundle传参

 

第一步:右侧Fragment对应的java代码RightFragment.java:

 1 import android.app.Fragment;
 2 import android.os.Bundle;
 3 import android.view.LayoutInflater;
 4 import android.view.View;
 5 import android.view.ViewGroup;
 6 import android.widget.TextView;
 7 /**
 8  * Created by panchengjia on 2016/12/18.
 9  */
10 public class RightFragment extends Fragment {
11     public RightFragment() {
12     }
13     /*Fragment的传参方式(通过Bundle对象来传递)
14         *采用这种传参方式可以保证用户在横竖屏切换时所
15         * 传递的参数不会丢失
16          */
17     public static RightFragment getInstance(String data){
18         RightFragment rightFragment = new RightFragment();
19         Bundle bundle = new Bundle();
20         //将需要传递的字符串以键值对的形式传入bundle
21         bundle.putString("data",data);
22         rightFragment.setArguments(bundle);
23         return rightFragment;
24     }
25     @Override
26     public void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28     }
29     @Override
30     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
31         View view =inflater.inflate(R.layout.right_layout,container,false);
32         TextView tv = (TextView) view.findViewById(R.id.tv);
33         String data = getArguments().getString("data");
34         tv.setText(data);
35         return view;
36     }
37     @Override
38     public void onPause() {
39         super.onPause();
40     }
41 }

第二步:主布局宿主Activity对应的java实现代码MainActivity.java:

 1 import android.app.FragmentManager;
 2 import android.app.FragmentTransaction;
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 public class Main3Activity extends AppCompatActivity {
 8     FragmentManager fragmentManager;
 9     FragmentTransaction fragmentTransaction;
10     LeftFragment leftFragment;
11     Button panhouye,bikonghai;//声明leftfragment中的按钮
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main2);
16         //获取fragmentManager
17         fragmentManager=getFragmentManager();
18         //通过findFragmentById找到leftFragment
19         leftFragment = (LeftFragment) fragmentManager.findFragmentById(R.id.left);
20         //找到对应的导航按钮并设置点击事件
21         panhouye = (Button) leftFragment.getView().findViewById(R.id.panhouye);
22         bikonghai = (Button) leftFragment.getView().findViewById(R.id.bikonghai);
23         panhouye.setOnClickListener(new View.OnClickListener() {
24             @Override
25             public void onClick(View v) {
26                 //调用方法修改rightfragment中的文本内



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android中Fragment与Activity之间的交互(两种实现方式),androidfragment

相关文章

  • 2017-05-26andriod绘制图形,andriod绘制
  • 2017-05-26Postgresql通过fdw_JDBC连接查询DB2\Oracle表
  • 2017-05-26DrawerLayout的openDrawer()和closeDrawer()方法,drawerlayout
  • 2017-05-26Android 高仿华为手机Tab页滑动导航效果
  • 2017-05-26Android开发技巧之Camera拍照功能
  • 2017-05-26Android事件分发机制浅谈(一),android浅谈
  • 2017-05-26Android实战技巧之四十九:Usb通信之USB Host
  • 2017-05-26Android 如何本地加载pdf文件,android加载pdf
  • 2017-05-26我的android学习经历,android学习经历
  • 2017-05-26Android 一个改善的okHttp封装库,androidokhttp

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 切换网站主域名经验总结
    • 安卓多线程间通信和多进程之间通信有什么不同?分别怎么实现?,安卓多线程
    • Android小项目:计算器
    • android下拉选择框spinner,android下拉spinner
    • 手势检测GestureDetector,gesturedetector
    • Tips:datapump异常中断后的处理
    • 在viewPager中双指缩放图片,双击缩放图片,单指拖拽图片,
    • Android之SQLite数据存储,androidsqlite
    • hellocharts-android-Android图表开源库的使用(一)
    • Linux内核系列—5.操作系统开发之特权级及特权级的转移,linux特权

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有