Android Fragment和Activity数据或对象的传递总结
来源:互联网 发布:网络直播电视怎么安装 编辑:程序博客网 时间:2024/05/01 15:27
Android Fragment和Activity数据或对象的传递总结
本文将展示Activity和Fragment之间、Fragment和Fragment的数据传递和对象改变,并作简要说明。
一.基础知识
(一)Activity获取Fragment的对象
1.可以通过findViewById或findViewByTag找到,一般用于静态创建的Fragment
//获取碎片A的对象 fragmentA= (FragmentA) getActivity().getSupportFragmentManager().findFragmentById(R.id.main_frag1);
2.可以通过Fragment的集合对象获取到,一般用于动态创建的Fragment
比如获取碎片集合中的第一个碎片对象: Fragment1 fragment1 = (Fragment1) getSupportFragmentManager().getFragments().get(0);
(二)Fragment中获取到Acitvity中的对象
这个就简单了,直接个体Activity然后强转成对应的Activity就可以了
MyActivity myActivity = (MyActivity) (getActivity());
二.示例
实现:Activity可以读取并改变Fragment1和Fragment2对象的数据。同时,Fragment1可以读取和改变Activity和Fragment2的数据。Fragment2也是读取和改变Fragment1和Activity中的数据。
效果:
动态效果图:
2
这里贴一下MyActivity和Fragment1的代码
MyActivity:
package com.example.viewPager2;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.widget.TextView;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MyActivity extends FragmentActivity { List<Fragment> list = new ArrayList<Fragment>(); ViewPager viewPager; String myActivityString; User myActivityUser; TextView tv_main_show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myActivityString = new String("这是MyActivity的字符串"); myActivityUser = new User("myActivityUser", 18); Fragment1 fragmemt1 = new Fragment1(); Fragment2 fragmemt2 = new Fragment2(); list.add(fragmemt1); list.add(fragmemt2); viewPager = (ViewPager) findViewById(R.id.home_vp); tv_main_show = (TextView) findViewById(R.id.tv_main_show); //创建适配器,设置的碎片管理器使用的是getChildFragmentManager() Myadapter adapter = new Myadapter(getSupportFragmentManager()); //给ViewPager设置适配器 viewPager.setAdapter(adapter); } //创建ViewPager适配器的类 class Myadapter extends FragmentStatePagerAdapter { public Myadapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } } /** * 获取Fragment1中的数据 * * @param view */ public void getFragment1Data(View view) { String msg = ((Fragment1) getSupportFragmentManager().getFragments().get(0)).fragment1String; User msg2 = ((Fragment1) getSupportFragmentManager().getFragments().get(0)).fragment1User; Toast.makeText(this, msg + msg2, Toast.LENGTH_SHORT).show(); } /** * 获取Fragment2中的数据 * * @param view */ public void getFragment2Data(View view) { String msg = ((Fragment2) getSupportFragmentManager().getFragments().get(1)).fragment2String; User msg2 = ((Fragment2) getSupportFragmentManager().getFragments().get(1)).fragment2User; Toast.makeText(this, msg + msg2, Toast.LENGTH_SHORT).show(); } /** * 改变Fragment1中显示的内容 */ public void changeFragment1Data(View view) { Fragment1 fragment1 = (Fragment1) getSupportFragmentManager().getFragments().get(0); fragment1.tv_fragment1_show.append("\nMyActivity在这里改变了数据"); } /** * 改变Fragment2中显示的内容 */ public void changeFragment2Data(View view) { Fragment2 fragment2 = (Fragment2) getSupportFragmentManager().getFragments().get(1); fragment2.tv_fragment2_show.append("\nMyActivity在这里改变了数据"); }}
Fragment1:
package com.example.viewPager2;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;/** * 碎片页面1 */public class Fragment1 extends Fragment implements View.OnClickListener { String fragment1String; User fragment1User; TextView tv_fragment1_show; @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { fragment1String = new String("这是Fragment1页面的数据"); fragment1User = new User("fragment1User", 88); View view = inflater.inflate(R.layout.fragment1, null); Button btn_getMyActivityData = (Button) view.findViewById(R.id.btn_getMyActivityData); Button btn_getFragment2Data = (Button) view.findViewById(R.id.btn_getFragment2Data); Button btn_changeMyActivityData = (Button) view.findViewById(R.id.btn_changeMyActivityData); Button btn_changeFragment2Data = (Button) view.findViewById(R.id.btn_changeFragment2Data); tv_fragment1_show = (TextView) view.findViewById(R.id.tv_fragment1_show); btn_getMyActivityData.setOnClickListener(this); btn_getFragment2Data.setOnClickListener(this); btn_changeMyActivityData.setOnClickListener(this); btn_changeFragment2Data.setOnClickListener(this); return view; } @Override public void onClick(View v) { String msg = ""; User user = null; /** * 获取MyActivity中的数据 */ if (v.getId() == R.id.btn_getMyActivityData) { msg = ((MyActivity) (getActivity())).myActivityString; user = ((MyActivity) (getActivity())).myActivityUser; Toast.makeText(getActivity(), msg + user, Toast.LENGTH_SHORT).show(); } /** * 获取Fragment2中的数据 */ if (v.getId() == R.id.btn_getFragment2Data) { msg = ((Fragment2) getFragmentManager().getFragments().get(1)).fragment2String; user = ((Fragment2) getFragmentManager().getFragments().get(1)).fragment2User; Toast.makeText(getActivity(), msg + user, Toast.LENGTH_SHORT).show(); } /** * 改变MyActivity中的数据 */ if (v.getId() == R.id.btn_changeMyActivityData) { MyActivity myActivity = (MyActivity) (getActivity()); myActivity.tv_main_show.append("\nFragment1改变了这里的数据"); } /** * 改变Fragment2中的数据 */ if (v.getId() == R.id.btn_changeFragment2Data) { Fragment2 fragment2 = (Fragment2) getFragmentManager().getFragments().get(1); fragment2.tv_fragment2_show.append("\nFragment1改变了这里的数据"); } }}
有时候使用Fragmentd相关类报错,有可能是V4包的源码有问题(版本原因),我的项目里有正确的v4包。
这个项目的源码地址:
http://download.csdn.net/detail/wenzhi20102321/9818301
关于Fragment和ViewPage的详细使用和相关知识的总结,很早以前写过:
还是比较详细的:
Fragment:
http://blog.csdn.net/wenzhi20102321/article/details/53572610
ViewPager和Fragment:
http://blog.csdn.net/wenzhi20102321/article/details/53584344
共勉:哪个人成功会随随便便!
1 0
- Android Fragment和Activity数据或对象的传递总结
- Android点滴-Activity和Fragment 传递数据
- Android activity Bundle和fragment数据传递
- Android fragment和activity之间的数据传递交互
- Android Activity、Fragment之间的数据传递和返回
- Android Activity/Fragment间的数据传递
- fragment和activity之间的数据传递
- Fragment和Activity之间的数据传递
- Activity和Fragment的数据传递
- Activity和Fragment之间的数据传递
- Activity和Fragment的数据传递
- Activity 和 Fragment 之间的数据传递
- Fragment和Activity之间的数据传递
- Activity和fragment传递数据的方式
- activity和activity之间传递对象,fragment和fragment之间传递对象的方法
- android fragment activity 数据传递
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- 区域的个数(坐标离散化)
- linux shell 中判断文件、目录是否存在
- EA&UML日拱一卒--类图::关联(关联,聚合,组合)
- 我的第一个Servlet小例子
- java学习之:fianlly语句和带资源的try语句
- Android Fragment和Activity数据或对象的传递总结
- nyoj 488 && hdu 1016 素数环
- 使用LIBSVM对原始文本语料进行文本分类(一)——语料介绍及文本预处理
- Android解决TextView文本过长方案
- C++之纯虚函数与抽象类
- spring mvc集成hibernate
- PHP正则提取图片img标记中的任意属性
- 算法竞赛入门经典 第二版 习题6-5 巡逻机器人 Patrol Robot uva1600
- Python 中的range()函数与array()函数