Fragment与Fragment之间的数据交互
来源:互联网 发布:怎么改软件字体大小 编辑:程序博客网 时间:2024/04/29 09:58
一、Fragment与Fragment之间的数据交互
(1)提出问题:Fragment与Fragment之间在什么样的场景下需要进行数据交互呢?
(2)图片说明:
场景说明:假设左侧的Fragment有个输入框,有一个按钮,右侧的Fragment有一个输入框,有一个按钮。希望在点击右侧Fragment中的按钮的时候,获取到第一个Fragment当中EditText中的值。
(3)实现思路
首先需要考虑的是如何获取右边Fragment的引用?
我们可以考虑使用FragmentManager。因为所有的Fragment在Activity当中都是由同一个FragmentManager来进行管理,在左侧的Fragment获取到FragmentManager对象的引用之后,接下来即可通过FragmentManager对象找到它所管理的所有的Fragment对象,因此也就可以操作其中任意的一个Fragment对象。
(4)实例代码:
- package com.example.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import com.example.android_fragment_trans.R;
- /**
- * 文件名: com.example.fragment.LeftFragment
- * 作者: 熊杰
- * 日期: 13-12-13
- * 时间: 06:11
- * 开发工具: IntelliJ IDEA 12.0.4
- * 开发语言: Java,Android
- * 开发框架:
- * 版本: v0.1
- * <strong>每当写一个Fragment的时候,需要有意识的写上这三个方法</strong>
- * <p></p>
- */
- public class LeftFragment extends Fragment{
- private Button btLeft;
- private FragmentManager fragmentManager;
- private RightFragment rightFragment;
- private EditText etRight;
- /**
- * 这个方法实例化变量
- * @param savedInstanceState
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- fragmentManager = getFragmentManager();
- }
- /**
- * 这个方法用于加载View
- * @param inflater
- * @param container
- * @param savedInstanceState
- * @return
- * 点击左边Fragment的Button要获取右边Fragment文本输入框中的值
- * 首先需要考虑的是如何获取右边Fragment的引用。
- * 有一个思路,所有的Fragment在Activity当中都是由同一个FragmentManager来进行管理。
- * 那么在左边的Fragment中是否可以得到FragmentManager对象呢?
- *
- * 另外补充说明,如果Fragment再嵌套Fragment,一个Fragment里面还有几个孩子,那么这几个孩子是平等的。那么
- * getChildFragmentManager()获取到的就是当前的这个Fragment,不再是Activity
- */
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.left_fragment,null);
- btLeft = (Button) view.findViewById(R.id.bt_left);
- btLeft.setOnClickListener(onClickListener);
- return view;
- }
- /**
- * 表示移开Fragment的时候,将数据提交
- */
- @Override
- public void onPause() {
- super.onPause();
- }
- /**
- * 点击左侧Fragment按钮时,可以通过FragemntManager()管理类,让它去findFragmentByTag(),去找到任意的Fragment。
- * 如果可以通过findFragmentByTag()方法找到Fragment,则可保证该Fragment与同一级的所有Fragment进行交互。
- */
- private View.OnClickListener onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- rightFragment = (RightFragment) fragmentManager.findFragmentByTag("right");
- etRight = (EditText) rightFragment.getView().findViewById(R.id.et_right);
- String etRightValue = etRight.getText().toString();
- Toast.makeText(getActivity(),"right====>>" + etRightValue,Toast.LENGTH_LONG).show();
- }
- };
- }
- package com.example.fragment;
- import android.os.Bundle;
- import android.support.v4.app.Fragment;
- import android.support.v4.app.FragmentManager;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import com.example.android_fragment_trans.R;
- /**
- * 文件名: com.example.fragment.RightFragment
- * 作者: 熊杰
- * 日期: 13-12-13
- * 时间: 06:13
- * 开发工具: IntelliJ IDEA 12.0.4
- * 开发语言: Java,Android
- * 开发框架:
- * 版本: v0.1
- * <strong>说明</strong>
- * <p></p>
- */
- public class RightFragment extends Fragment {
- private Button btRight;
- private FragmentManager fragmentManager;
- private LeftFragment leftFragment;
- private EditText etLeft;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- fragmentManager = getFragmentManager();
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.right_fragment,null);
- btRight = (Button) view.findViewById(R.id.bt_right);
- btRight.setOnClickListener(onClickListener);
- return view;
- }
- @Override
- public void onPause() {
- super.onPause();
- }
- private View.OnClickListener onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- leftFragment = (LeftFragment) fragmentManager.findFragmentByTag("left");
- etLeft = (EditText) leftFragment.getView().findViewById(R.id.et_left);
- String etRightValue = etLeft.getText().toString();
- Toast.makeText(getActivity(), "left====>>" + etRightValue, Toast.LENGTH_LONG).show();
- }
- };
- }
- package com.example.android_fragment_trans;
- import android.os.Bundle;
- import android.support.v4.app.FragmentActivity;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.app.FragmentTransaction;
- import com.example.fragment.LeftFragment;
- import com.example.fragment.RightFragment;
- public class MyActivity extends FragmentActivity {
- private FragmentManager fragmentManager;
- private FragmentTransaction fragmentTransaction;
- /**
- * 在Activity初始化的时候,将Fragment添加到Activity当中
- * @param savedInstanceState
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- fragmentManager = getSupportFragmentManager();
- fragmentTransaction = fragmentManager.beginTransaction();
- LeftFragment leftFragment = new LeftFragment();
- RightFragment rightFragment = new RightFragment();
- /**
- * fragmentTransaction.add()
- * fragmentTransaction.replace()
- * 这两个方法有什么区别呢?
- * add()方法是将Fragment加到Activity当中。
- * replace()方法表示将之前的Fragment从Activity当中移除掉
- */
- fragmentTransaction.add(R.id.left,leftFragment,"left");
- fragmentTransaction.add(R.id.right,rightFragment,"right");
- fragmentTransaction.commit();
- }
- }
二、话题引深
Fragment再嵌套Fragment,如何在Fragment中与嵌套Fragment进行数据交互呢?
也就是说左侧的Fragment要与右侧Fragment中的Fragment进行数据交互如何实现?
实现思路:
首先需要通过FragmentManager管理类找到右侧的Fragment,然后通过右侧的Frament的ChildFragmentManager()管理类再找到里面的Fragment。
0 0
- Fragment与Fragment之间的数据交互
- activity与fragment之间的数据交互
- Fragment与Activity之间的数据交互
- Fragment与Activity之间的数据交互
- Fragment与Fragment之间交互
- android Fragment与Activity之间数据交互
- Android进阶之Fragment与Activity之间的数据交互
- Fragment与Fragment之间的数据传递
- Fragment之间的交互
- 【Fragment精深系列4】Fragment与Activity之间的数据交互
- 【Fragment精深系列4】Fragment与Activity之间的数据交互
- Activity与fragment之间的交互总结
- Activity与fragment之间交互
- Fragment之间的实时交互
- 关于Fragment之间的交互
- Android Fragment与Fragment之间数据获取
- Android Fragment与Fragment之间数据获取
- Android-Fragment与Fragment之间数据获取
- java垃圾处理机制(二)
- TCP UDP 总结
- Python学习笔记之数据类型总结
- Android RIL结构分析与移植
- Google Chrome、ie、世界之窗、火狐等浏览器主页被hao123绑架解决办法
- Fragment与Fragment之间的数据交互
- glance index 失败解决方法
- 走路能减肥
- 动态库 静态库
- 去除EditPlus自动备份功能
- 新创企业短期顾问和长期员工的股权额度权衡
- 计算机数据存储模式
- How to programmatically clear the filesystem memory cache in C++ on a Linux system?
- Ubuntu SSH远程连接的用户帐号