android Fragment系列学习笔记之六
2013-12-29 23:02
399 查看
一、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();
}
};
}
*/
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();
}
};
}
二、话题引深
Fragment再嵌套Fragment,如何在Fragment中与嵌套Fragment进行数据交互呢?
也就是说左侧的Fragment要与右侧Fragment中的Fragment进行数据交互如何实现?
实现思路:
[align=left] 首先需要通过FragmentManager管理类找到右侧的Fragment,然后通过右侧的Frament的ChildFragmentManager()管理类再找到里面的Fragment。[/align]
(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 * 说明 *
*/
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进行数据交互如何实现?
实现思路:
[align=left] 首先需要通过FragmentManager管理类找到右侧的Fragment,然后通过右侧的Frament的ChildFragmentManager()管理类再找到里面的Fragment。[/align]
相关文章推荐
- Android Fragment系列学习笔记之四
- android开发学习笔记系列(5)--fragment与viewpage
- Android Fragment系列学习笔记之二
- android Fragment系列学习笔记之五
- Android Fragment系列学习笔记之三
- Android Fragment系列学习笔记之一
- Android编程学习笔记 之 Fragment与Activity的数据传递
- Android程序开发学习笔记系列——基础篇(附源码)
- Android Fragment学习笔记(二)----Fragment界面添加和管理
- 自学Android系列 笔记2 Android 学习之Activity回传值
- [学习笔记]用户界面优化之Android Fragment
- android菜鸟学习笔记27----Fragment的简单使用
- Android程序开发学习笔记系列——基础篇(附源码)
- Android之Fragment实现界面切换学习笔记
- 自学Android系列 笔记2 Android 学习之toast
- [Android学习系列7]数据库学习笔记
- [Android] 关于Fragment 和 TabHost的学习笔记
- android系列学习:tab切换,fragment中嵌套listview,listview自定义item,优化以及onclick
- Android之Fragment+ViewPager实现点击+滑动界面切换学习笔记
- Android Fragment学习笔记(1)———简单Fragment实现