`
百合不是茶
  • 浏览: 356024 次
社区版块
存档分类
最新评论

Fragment之间的通信

阅读更多

两个单独的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);
	}

}

 

 

  • 大小: 17.5 KB
  • 大小: 17.2 KB
1
2
分享到:
评论

相关推荐

    Fragment之间通信实例

    本文将深入探讨如何在Android的Fragment之间进行有效通信,并通过实例来阐述这一过程。 首先,了解Fragment的基本结构。一个Fragment通常包含布局文件(XML)和一个关联的Java类。在Java类中,可以定义方法和变量,...

    Fragment和Activity通信以及Fragment之间通信的方式(1)

    本篇将详细介绍Fragment与Activity以及Fragment间通信的方式。 首先,我们来看Fragment与Activity的通信: 1. **通过接口回调**:这是一种常见的通信方式,适用于Fragment需要向Activity传递事件或数据的情况。...

    Fragment和Activity通信以及Fragment之间通信的方式(二)

    两者之间的通信以及Fragment之间的通信是Android开发中的重要知识点,这对于创建复杂的、交互丰富的用户界面至关重要。在本篇中,我们将深入探讨这两种通信方式。 首先,我们来看Fragment与Activity的通信。...

    Android两个Fragment之间通信Demo

    要实现两个Fragment之间的通信,有多种方式: 1. **通过Activity作为桥梁**:这是最常见的方式。当一个Fragment需要向另一个Fragment传递数据或事件时,可以通过调用Activity的方法,然后由Activity转发给目标...

    接口回调之Fragment之间通信

    接口回调是一种常见的Android组件间通信方式,尤其适用于父子组件或平等组件之间的交互。在Fragment之间,我们可以通过定义一个接口,然后让需要接收事件的Fragment实现这个接口,当发送事件的Fragment有动作时,...

    Fragment之间通信

    一种常见的Fragment间通信方式是通过定义接口。一个Fragment实现接口,并在需要通信时调用接口方法,而另一个Fragment作为监听者,实现该接口。这种方式适用于父子Fragment或两个没有直接关系的Fragment之间的通信...

    Fragment与Activity之间通信实例

    Fragment与Activity之间的通信是Android开发中常见的需求,特别是在创建复杂、动态布局时。本实例将深入探讨这一主题,讲解如何在Fragment和Activity之间有效地传递数据和执行操作。 首先,让我们了解Fragment和...

    fragment+viewpager实现不同fragment之间的通信

    本篇将详细介绍如何在Fragment和ViewPager的场景下实现不同Fragment之间的通信。 首先,理解Fragment通信的基本原理。Fragment间通信主要有以下几种方式: 1. 使用接口:定义一个接口,让需要通信的Fragment实现该...

    activity与fragment以及fragment与fragment之间的通信

    在Android应用开发中,Activity和Fragment是两个核心组件,它们之间的通信以及Fragment之间的通信是构建复杂用户界面的关键。本文将详细探讨Activity与Fragment、Fragment与Fragment之间如何有效地进行通信。 一、...

    fragment之间通信 eventbus

    EventBus是一个发布/订阅事件总线,简化了Android应用程序中的组件间通信。 EventBus的基本概念是发布者(Publisher)发布事件(Event),订阅者(Subscriber)订阅这些事件并进行处理。它将事件的发送与接收解耦,...

    Android Fragment 间通信

    1. ...2. android fragment 间通信用接口的方式实现,要实现的目标是在一个Activity中的两个Fragment,当一个Fragment中做动作的时候另一个Fragment做出相应的反应。

    详解Android activity与fragment之间的通信交互

    在开发过程中不可避免的会出现fragment与fragment,fragment与activity之间的通信交互问题。 本章讲述如何实现fragment与activity之间的通信。 一、APP构成 MainActivity+底部导航栏; 二、通信目的 MainActivity中...

    fragment间的通信

    下面将详细探讨Fragment间通信的各种方式和注意事项。 1. **通过Interface(接口)进行通信** 当一个Fragment需要与宿主Activity或其他Fragment通信时,可以定义一个接口。Fragment实现这个接口,并在适当的时候...

    官方 FragmentBasics 源码(Fragment之间通信)

    5. **Fragment之间的通信** - **通过接口:** 一种常见的通信方式是定义一个接口,Fragment实现这个接口,然后在需要通信时调用接口方法。Activity同样实现该接口,这样Fragment就可以通过接口回调将消息传递给...

    Fragemt与Activity之间的通信 双Fragment通信

    本篇将详细探讨Fragment与Fragment以及双Fragment之间的通信机制。 首先,了解Fragment的基本概念:Fragment是Android SDK中的一个类,可以视为一个小型的Activity,但通常在更大的视图上下文中运行,如在一个...

    fragment和activity之间通信

    它允许你在XML中定义导航图,包含Fragment之间的过渡动作,甚至可以处理数据传递。 在这个"fragment和activity之间通信"的小Demo中,开发者可能展示了如何创建一个简单的示例,演示了上述一种或多种通信方式。具体...

    Fragment之间的通信之万能接口

    Fragment之间的通信是Android应用设计中常见的需求,尤其是在构建复杂界面时。本篇文章将详细探讨如何通过“万能接口”来实现Fragment与Activity之间的通信。 首先,我们需要在Fragment中定义一个接口。这个接口...

    Android应用开发中Fragment间通信的实现教程

    在复杂的布局和交互中,往往需要多个Fragment之间的通信。本教程将详细介绍如何实现Fragment间的通信,主要涉及接口定义、动态加载以及静态加载。 首先,理解Fragment通信的基本原则:所有Fragment之间的通信都应该...

    Fragment通信及参数传递

    在这个实例中,我们将探讨如何通过接口调用来实现Fragment之间的通信和参数传递。 首先,理解Fragment通信的重要性:在大型应用中,一个Activity往往包含多个Fragment,它们各自负责不同的功能区域。为了使这些...

Global site tag (gtag.js) - Google Analytics