关于fragment的传值

前言:

fragment是在Android3.0定义出来的,它和Activity的区别其实在于fragment能够更好的支持界面模块化,例如可以在同一个Activity界面上显示两块fragment,点击左边fragment中的控件去改变右边fragment中的控件。

相对的来说,fragment算是一个抽象的Activity。

fragment可以实现标签切换,当然,要做标签切换效果用Viewpager最好。

正题

fragment传值有两种情况:

1、同一个Activity中不同容器(container)的两个fragment值传递。

2、同一个容器(container)的两个fragment值传递。

传值的方式有很多,但是基于项目中代码应该具有更大的耦合性,因此建议采用广播方式传值。

先以情况2为例:

同一容器中fragment1中定义两个Button(bt1、bt2),fragment2中定义一个TextView(tv),点击不同的Button来改变TextView的值。

fragment1代码:

 1 public class Fragment1 extends Fragment {
 2
 3     private Button bt1;
 4     private Button bt2;
 5
 6
 7     @Override
 8     public View onCreateView(LayoutInflater inflater, ViewGroup container,
 9             Bundle savedInstanceState) {
10         View view = inflater.inflate(R.layout.fragment1, null);
11         bt1 = (Button) view.findViewById(R.id.bt1);
12         bt2 = (Button) view.findViewById(R.id.bt2);
13
14         bt1.setOnClickListener(new MyClickListener());
15         bt2.setOnClickListener(new MyClickListener());
16
17
18         return view;
19     }
20
21     private class MyClickListener implements OnClickListener{
22
23         @Override
24         public void onClick(View v) {
25
26
27             switch(v.getId()){
28             case R.id.bt1:
29                 Intent intent = new Intent();
30                 intent.setAction("123");
31                 LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
32                 break;
33
34             case R.id.bt2:
35                 Intent intent2 = new Intent();
36                 intent2.setAction("321");
37                 LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent2);
38                 break;
39             }
40
41         }
42
43     }
44
45
46 }

fragment2代码:

 1 public class Fragment2 extends Fragment {
 2
 3     private TextView tv;
 4
 5     @Override
 6     public View onCreateView(LayoutInflater inflater, ViewGroup container,
 7             Bundle savedInstanceState) {
 8         View view = inflater.inflate(R.layout.fragment2, null);
 9         tv = (TextView)view.findViewById(R.id.tv);
10
11         return view;
12     }
13
14
15
16
17
18 @Override
19     public void onActivityCreated(Bundle savedInstanceState) {
20     LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
21     IntentFilter filter = new IntentFilter();
22     filter.addAction("123");
23     filter.addAction("321");
24     MyBroadcastReciver myBroadcastReciver = new MyBroadcastReciver();
25     localBroadcastManager.registerReceiver(myBroadcastReciver, filter);
26     super.onActivityCreated(savedInstanceState);
27     }
28
29
30
31     private class MyBroadcastReciver extends BroadcastReceiver{
32
33         @Override
34         public void onReceive(Context context, Intent intent) {
35             String s = intent.getAction();
36             if(s.equals("123")){
37                 tv.setText("111111111");
38             }else if(s.equals("321")){
39                 tv.setText("222222222");
40             }
41
42         }
43
44     }
45
46     @Override
47     public void onDestroy() {
48
49         super.onDestroy();
50     }
51
52 }

此方法中利用不同的Button产生不同的广播,然后再在接收端来String s = intent.getAction(); 再对s的值进行判断做对应处理。

时间: 11-20

关于fragment的传值的相关文章

Android:理解Fragment

最近都在公司搞测试,静不下心来学android.今天就把Fragment搞懂吧. Fragment的几点要点: 1.用于大屏幕平板,容纳更多组件,可复用2.Fragment必须嵌入Activity中 3.Fragment有自己的生命周期,但必须在Activity是run的状态下(毕竟是嵌入在Activity里) Fragment继承体系: Fragment回调方法: onCreate(): 创建Fragment对象时回调 onCreateView() :绘制组件时回调,返回一个View,作为Fr

Fragment总结

/*---------------------------------------- *-描述--Fragment例题总结. *-描述--S1.Fragment的生命周期 * ---Fragment的相关内容 * 1.个Fragment 必须总是被嵌入到一个Activity 中,它的生命周期直接依赖于宿主Activity生命周期 * 2.要创建一个Fragment 必须创建一个Fragment 的子类,或者继承自另一个已经存在的Fragment的子类 * 并重写 onCreate().onCre

学习Android之初。

今天开始,要正式系统的学习Android了.我想要看清未来的路.so,我查了很多,这篇博客很对胃口,写的很具体,一目了然.以至于可以预知之后的路. Thanks.从今天开始,也要付出努力了.当下把Android学好,以后工作后学习,前端和服务器端,以及html5和Hadoop.我爱编程,它将伴我一生. 大道三千,何以证道? 最近有私信.邮件给我咨询一些职业生涯规划的同学,我在这里以过来人的身份给大家一些建议. 任何行业,任何职位,无论高低,无论大小,都可以分为广博.精深两个方向. 精深自然指的是

程序员之路:以Android证道

大道三千,何以证道? 最近有私信.邮件给我咨询一些职业生涯规划的同学,我在这里以过来人的身份给大家一些建议. 任何行业,任何职位,无论高低,无论大小,都可以分为广博.精深两个方向. 精深自然指的是在某一领域造诣深厚,当然也不会是对别的技术一无所知,否则就成了独腿人,岂能走得远?广博自然指的是涉及面广,知识丰富,对各种技术都有所涉猎,当然不会是浅尝辄止的接触,所谓的全栈程序员自然属于这一类型,我本身也是这一类型的. 精深 首先说一下精深,作为Android程序员,所必需掌握的基础知识:0. Jav

Activity---Fragment---listView的实现

我们要做的是在Activity中加入一个ViewPager,利用ViewPager的适配器(继承于FragmentPagerAdapter)将Fragment加到其中,而我们在又在Fragment中又加入了一个ListVIew,这又要一个继承与BaseAdapter的适配器. 当我们滑动ViewPager时,顶栏也联动滑动,这需要一个第三方组件,PagerSlidingTabStrip.导包等一系列步骤暂不说明. 1.首先,建立一个Activity,里面有ViewPager和PagerSlidi

activity传值到fragment

public class MyFragment extends Fragment { //FragmentActivity public static MyFragment staticInstance = null; public static MyFragment getInstance() { if (staticInstance == null){ staticInstance = new MyFragment(); } return staticInstance; } ImageVie

fragment 数据传递,传值,通信

[原][Fragment精深系列4]Fragment与Activity之间的数据交互 2015-5-26阅读389 评论0   以下内容来自于自己的实践和网络资料的整理,希望对你有帮助. 一.Activity把值传递给Fragment   建议的传值方式是通过Bundle来传递,而不是直接作为fragment的构造参数传递.在activity中创建bundle数据包,并调用fragment的setArguments(Bundle bundle)方法,即可将Bundle数据包传给fragment.

从activity向另一个activity中的fragment传值

============问题描述============ 例如我有两个activity1,和activity2 其中activity2有一个fragment 我通过intent从activity1跳转到activity2,如何把activity1中的值传到activity2中的fragment中呢 求具体代码 我试过在1中声明bundle然后用setArgument 然后在fragment中getArgument 但是还是报错 还是应该从2中setArgument?不太清楚 求指教 ======

Android中fragment之间和Activity的传值、切换

功能介绍:通过一个activity下方的三个按钮,分别是发送消息(sendButton).聊天记录(chatButton).常用语(commonButton).当单击按钮是,来切换上方的fragment,用以显示不同的内容. 所用的知识点:当单击发送消息按钮时: 1.从MainActivity中把EditText中的值传到fragment中. 2.fragment如何动态的显示在MainActivity中. 针对第一个问题:在sendButton单击事件中: private OnClickLis