我是靠谱客的博主 大意柠檬,最近开发中收集的这篇文章主要介绍Android Fragment和Activity数据或对象的传递总结Android Fragment和Activity数据或对象的传递总结一.基础知识二.示例,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
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
共勉:哪个人成功会随随便便!
最后
以上就是大意柠檬为你收集整理的Android Fragment和Activity数据或对象的传递总结Android Fragment和Activity数据或对象的传递总结一.基础知识二.示例的全部内容,希望文章能够帮你解决Android Fragment和Activity数据或对象的传递总结Android Fragment和Activity数据或对象的传递总结一.基础知识二.示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复