前言:
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的值进行判断做对应处理。
时间: 2024-11-05 08:32:31