Android Fragment与Fragment之间数据获取

上一篇介绍了,Fragment从Activity获取数据。这篇介绍两个Fragment之间的如何获取数据。

一、通过findFragmentByTag("mainFragment")方式:

MainActivity包含有两个Fragment,LeftFragment和RightFragment,如果Leftfragment想要获取RightFragment中的数据,那么首先要通过FragmentManager获取的RightFragment的实例,然后获取到RightFragment的布局View,然后就可以通过View获取其EditText输入的值。右侧获取左侧的值也是相同原理。

实现效果:

点击右侧Fragment中的按钮,获取到了左侧Fragment  EditText中的数值,然后通过吐司显示出来。

源代码:

布局文件:

activity_main:

<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"
    tools:context=".MainActivity" >

    <LinearLayout
        android:id="@+id/left"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#CCCCCC"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/right"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >
    </LinearLayout>

</LinearLayout>


left.xml:

<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="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取右侧的Fragment中的数据" />

</LinearLayout>


right.xml:

<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="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="获取左侧的Fragment中的数据" />

</LinearLayout>


代码:

MainActivity:

package com.fragmentdemo7_commutetwofrag;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
/**
 * 该Activity包括两个Fragment:LeftFragment和RightFragment
 *
 */
public class MainActivity extends Activity {
	private FragmentManager manager;
	private FragmentTransaction transaction;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		manager = getFragmentManager();
		transaction = manager.beginTransaction();
		/**
		 * 将左右两个Fragment添加到MainActivity中。
		 */
		LeftFragment leftFragment = new LeftFragment();
		RightFragment rightFragment = new RightFragment();
		transaction.replace(R.id.left, leftFragment, "left");
		transaction.replace(R.id.right, rightFragment, "right");
		
		transaction.commit();
	}

}


LeftFragment:

package com.fragmentdemo7_commutetwofrag;

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
 * 左侧的Fragment
 *
 */
public class LeftFragment extends Fragment {
	private Button button;
	private FragmentManager manager;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		manager = getFragmentManager();
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.left, null);
		button = (Button) view.findViewById(R.id.button1);
		/**
		 * 点击左侧Fragment中的按钮,获取右侧输入在EditText中的数据,以吐司形式显示出来。
		 */
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/**
				 * 通过FragmentManager实例化对象,通过Tag获取到RightFragment,然后再获取到该View中的editText中的数据。
				 */
				RightFragment rightFragment = (RightFragment) manager.findFragmentByTag("right");
				String msg = ((EditText)rightFragment.getView().findViewById(R.id.editText1)).getText().toString();
				Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
				
			}
		});
		
		return view;
	}

}


RightFragment:

package com.fragmentdemo7_commutetwofrag;

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
 * 右侧的Fragment
 */
public class RightFragment extends Fragment {
	private Button button;
	private FragmentManager manager;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		manager = getFragmentManager();
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.right, null);
		button = (Button) view.findViewById(R.id.button1);
		/**
		 * 点击右侧Fragment中的按钮,获取左侧输入在EditText中的数据,以吐司形式显示出来。
		 */
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				/**
				 * 通过FragmentManager实例化对象,通过Tag获取到LeftFragment,然后再获取到该View中的editText中的数据。
				 */
				LeftFragment leftFragment = (LeftFragment) manager.findFragmentByTag("left");
				String msg = ((EditText)leftFragment.getView().findViewById(R.id.editText1)).getText().toString();
				Toast.makeText(getActivity(), msg, Toast.LENGTH_SHORT).show();
			}
		});
		return view;
	}

}

二、采取接口回调的方式进行数据传递。

三、使用三方开源框架:EventBus。


源代码下载:

点击下载源码

参考:

Android Fragment之间数据传递的三种方式

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红日666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值