两个单独的Fragment之间是不应该进行通信的。应该使用他们所存在的Activity作为沟通的纽带。
Activity中可以获得Fragment的管理器
//获得Fragment的管理器 FragmentManager manager = this.getFragmentManager(); //使用findFragmentById获得Fragment的id SecondFragment second = (SecondFragment) manager .findFragmentById(R.id.secondFragment);
Fragment中可以获得可以获得自己的Activity
//Fragment可以获得Activity,调用Activity的的方法 MainActivity ac = (MainActivity) this.getActivity();
效果图:
点击左边的Fragment修改右边的Fragment
左边的Fragment的xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#cc00cc" android:orientation="horizontal" > <ListView android:id="@+id/listView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
2,右边的Fragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#cc0000" android:orientation="horizontal" > <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="match_parent" android:text="我是一个文本" /> </LinearLayout>
3,操作左边xml文件的java类
public class FirstFragment extends Fragment implements OnItemClickListener { private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.first_fragment, container, true); listView = (ListView) view.findViewById(R.id.listView); String[] items = { "语言和输入", "亮度", "存储", "网络" }; ArrayAdapter<String> adapter = new ArrayAdapter<String>( this.getActivity(), android.R.layout.simple_expandable_list_item_1, items); listView.setAdapter(adapter); listView.setOnItemClickListener(this); return view; } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获得被点击的条目文本 String str = (String) parent.getAdapter().getItem(position); //Fragment可以获得Activity,调用Activity的的方法 MainActivity ac = (MainActivity) this.getActivity(); ac.change(str); } }
3, SecondFragment 的类操作右边的xml
public class SecondFragment extends Fragment { private TextView tView; static String TAG = "AC"; @Override public void onAttach(Activity activity) { Log.i(TAG, "---------------->onAttach"); super.onAttach(activity); } @Override public void onCreate(Bundle savedInstanceState) { Log.i(TAG, "---------------->onCreate"); super.onCreate(savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { Log.i(TAG, "---------------->onActivityCreated"); super.onActivityCreated(savedInstanceState); } @Override public void onStart() { Log.i(TAG, "---------------->onStart"); super.onStart(); } @Override public void onResume() { Log.i(TAG, "---------------->onResume"); super.onResume(); } @Override public void onPause() { Log.i(TAG, "---------------->onPause"); super.onPause(); } @Override public void onStop() { Log.i(TAG, "---------------->onStop"); super.onStop(); } @Override public void onDestroyView() { Log.i(TAG, "---------------->onDestroyView"); super.onDestroyView(); } @Override public void onDestroy() { Log.i(TAG, "---------------->onDestroy"); super.onDestroy(); } @Override public void onDetach() { Log.i(TAG, "---------------->onDetach"); super.onDetach(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "---------------->onCreateView"); View view = inflater .inflate(R.layout.second_fragment, container, false); tView = (TextView) view.findViewById(R.id.text); return view; } public TextView gettView() { return tView; } }
4,定义主配置的xml文件 定义成fragment的组件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".MainActivity" > <fragment android:id="@+id/firstFragment" android:name="com.example.fragmant.FirstFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <fragment android:id="@+id/secondFragment" android:name="com.example.fragmant.SecondFragment" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout>
5,MainActivity 操作文件
public class MainActivity extends Activity { static String TAG = "AC"; @Override protected void onCreate(Bundle savedInstanceState) { Log.i(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } //改变Fragment的方法 使用findFragmentById获得Fragment的id public void change(String msg) { //获得Fragment的管理器 FragmentManager manager = this.getFragmentManager(); //使用findFragmentById获得Fragment的id SecondFragment second = (SecondFragment) manager .findFragmentById(R.id.secondFragment); //改变第二个Fragment的值 second.gettView().setText(msg); } }
相关推荐
本文将深入探讨如何在Android的Fragment之间进行有效通信,并通过实例来阐述这一过程。 首先,了解Fragment的基本结构。一个Fragment通常包含布局文件(XML)和一个关联的Java类。在Java类中,可以定义方法和变量,...
本篇将详细介绍Fragment与Activity以及Fragment间通信的方式。 首先,我们来看Fragment与Activity的通信: 1. **通过接口回调**:这是一种常见的通信方式,适用于Fragment需要向Activity传递事件或数据的情况。...
两者之间的通信以及Fragment之间的通信是Android开发中的重要知识点,这对于创建复杂的、交互丰富的用户界面至关重要。在本篇中,我们将深入探讨这两种通信方式。 首先,我们来看Fragment与Activity的通信。...
要实现两个Fragment之间的通信,有多种方式: 1. **通过Activity作为桥梁**:这是最常见的方式。当一个Fragment需要向另一个Fragment传递数据或事件时,可以通过调用Activity的方法,然后由Activity转发给目标...
接口回调是一种常见的Android组件间通信方式,尤其适用于父子组件或平等组件之间的交互。在Fragment之间,我们可以通过定义一个接口,然后让需要接收事件的Fragment实现这个接口,当发送事件的Fragment有动作时,...
一种常见的Fragment间通信方式是通过定义接口。一个Fragment实现接口,并在需要通信时调用接口方法,而另一个Fragment作为监听者,实现该接口。这种方式适用于父子Fragment或两个没有直接关系的Fragment之间的通信...
Fragment与Activity之间的通信是Android开发中常见的需求,特别是在创建复杂、动态布局时。本实例将深入探讨这一主题,讲解如何在Fragment和Activity之间有效地传递数据和执行操作。 首先,让我们了解Fragment和...
本篇将详细介绍如何在Fragment和ViewPager的场景下实现不同Fragment之间的通信。 首先,理解Fragment通信的基本原理。Fragment间通信主要有以下几种方式: 1. 使用接口:定义一个接口,让需要通信的Fragment实现该...
在Android应用开发中,Activity和Fragment是两个核心组件,它们之间的通信以及Fragment之间的通信是构建复杂用户界面的关键。本文将详细探讨Activity与Fragment、Fragment与Fragment之间如何有效地进行通信。 一、...
EventBus是一个发布/订阅事件总线,简化了Android应用程序中的组件间通信。 EventBus的基本概念是发布者(Publisher)发布事件(Event),订阅者(Subscriber)订阅这些事件并进行处理。它将事件的发送与接收解耦,...
1. ...2. android fragment 间通信用接口的方式实现,要实现的目标是在一个Activity中的两个Fragment,当一个Fragment中做动作的时候另一个Fragment做出相应的反应。
在开发过程中不可避免的会出现fragment与fragment,fragment与activity之间的通信交互问题。 本章讲述如何实现fragment与activity之间的通信。 一、APP构成 MainActivity+底部导航栏; 二、通信目的 MainActivity中...
下面将详细探讨Fragment间通信的各种方式和注意事项。 1. **通过Interface(接口)进行通信** 当一个Fragment需要与宿主Activity或其他Fragment通信时,可以定义一个接口。Fragment实现这个接口,并在适当的时候...
5. **Fragment之间的通信** - **通过接口:** 一种常见的通信方式是定义一个接口,Fragment实现这个接口,然后在需要通信时调用接口方法。Activity同样实现该接口,这样Fragment就可以通过接口回调将消息传递给...
本篇将详细探讨Fragment与Fragment以及双Fragment之间的通信机制。 首先,了解Fragment的基本概念:Fragment是Android SDK中的一个类,可以视为一个小型的Activity,但通常在更大的视图上下文中运行,如在一个...
它允许你在XML中定义导航图,包含Fragment之间的过渡动作,甚至可以处理数据传递。 在这个"fragment和activity之间通信"的小Demo中,开发者可能展示了如何创建一个简单的示例,演示了上述一种或多种通信方式。具体...
Fragment之间的通信是Android应用设计中常见的需求,尤其是在构建复杂界面时。本篇文章将详细探讨如何通过“万能接口”来实现Fragment与Activity之间的通信。 首先,我们需要在Fragment中定义一个接口。这个接口...
在复杂的布局和交互中,往往需要多个Fragment之间的通信。本教程将详细介绍如何实现Fragment间的通信,主要涉及接口定义、动态加载以及静态加载。 首先,理解Fragment通信的基本原则:所有Fragment之间的通信都应该...
在这个实例中,我们将探讨如何通过接口调用来实现Fragment之间的通信和参数传递。 首先,理解Fragment通信的重要性:在大型应用中,一个Activity往往包含多个Fragment,它们各自负责不同的功能区域。为了使这些...