展会信息港展会大全

android Fragment系列学习笔记之六
来源:互联网   发布日期:2015-09-29 10:59:08   浏览:1573次  

导读:一、Fragment与Fragment之间的数据交互 (1)提出问题:Fragment与Fragment之间在什么样的场景下需要进行数据交互呢? (2)图片说明:...

一、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

* 每当写一个Fragment的时候,需要有意识的写上这三个方法

*

*/

public class LeftFragment extends Fragment{

private Button btLeft;

private FragmentManager fragmentManager;

privateRightFragment 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

* 说明

*

*/

public class RightFragment extends Fragment {

private Button btRight;

private FragmentManager fragmentManager;

privateLeftFragment 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。

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港