🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**碎片之间进行交互** **[点击下载源码](http://download.csdn.net/detail/u012904198/7337195)** 很多时候,一个活动中包含一个或者多个碎片,它们彼此协作,向用户展示一个一致的UI。在这种情况下,碎片之间能进行通信并交换数据十分重要。 1、使用上一篇中创建的同一个项目,在fragment.xml中添加TextView的标识id: ~~~ android:id="@+id/lblFragment1" ~~~ 2、在fragment2.xml中添加一个Button,用于与fragment1进行交互: ~~~ <Button android:id="@+id/btnGetText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get text in Fragment #1" android:textColor="#000000" /> ~~~ 3、将两个碎片重新添加到main.xml中: ~~~ <fragment android:id="@+id/fragment1" android:name="net.zenail.Fragments.Fragment1" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="1" /> <fragment android:id="@+id/fragment2" android:name="net.zenail.Fragments.Fragment2" android:layout_width="0px" android:layout_height="match_parent" android:layout_weight="1" /> ~~~ 4、在FragmentsActivity.java中,注释掉上一篇中添加的代码,修改后如下: ~~~ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); // WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); if (display.getWidth() > display.getHeight()) { // Fragment1 fragment1 = new Fragment1(); fragmentTransaction.replace(android.R.id.content, fragment1); } else { // Fragment2 fragment2 = new Fragment2(); fragmentTransaction.replace(android.R.id.content, fragment2); } fragmentTransaction.commit(); */ } ~~~ 5、在Fragment2.java中添加如下代码,实现与Fragment1的交互: ~~~ @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); Button btnGetText = (Button) getActivity() .findViewById(R.id.btnGetText); btnGetText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub TextView lbl = (TextView) getActivity().findViewById( R.id.lblFragment1);//通过getActivity()方法获得当前嵌入了该碎片的活动,再使用findViewById()定位该碎片中包含的视图 Toast.makeText(getActivity(), lbl.getText(), Toast.LENGTH_SHORT) .show(); } }); } ~~~ 6、按F11调试应用程序,在右侧的第二个碎片中单击按钮,可以看到弹出一个消息框,内容正是碎片1中TextView的内容,说明获取成功~ ![](https://box.kancloud.cn/2016-08-23_57bc06b931b68.jpg)