Fragment进行数据传递

fragment里面是没有findviewbyid的 那么怎么获得其中的控件呢 ?

MainActivity中建立fragmentManager -->使用fm.findFragmentById(R.id.fragment1)

在该fragment 的类中 onCreateView 方法内提供了inflater属性 使用这个属性 可以从XML文件填充一个view(控件就在这个xml文件上) View view = inflater.inflate(R.layout.fragment1, null);

通过这个view 就可以Button bt = (Button) view.findViewById(R.id.bt); 接下来 就可以为其在fragment 的类中注册事件

但是 我们的目的是和其他 fragment 交互 其他fragment的组件我怎么在当前的fragment类中建立关系呢?

在事件中 getActivity() 可以取得当前fragment所绑定的Activity(在这个例子里面是MainActivity)

然后getActivity().getFragmentManager()找到管理者 再findFragmentById(R.id.xxx),即getActivity().getFragmentManager().findFragmentById(R.id.要建立联系的目标fragment)

这时候2者已经建立了联系 此时目标fragment需要暴露一个方法供其他fragment使用

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    
    <fragment 
        android:id="@+id/fragment1"
        android:name="com.example.firstfragment.Fragment1"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        />
    <fragment 
        android:id="@+id/fragment2"
        android:name="com.example.firstfragment.Fragment2"
        android:layout_width="0dip"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        />
    
</LinearLayout>

fragment1.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="#0000ff"
    android:orientation="vertical" >
    
    <Button 
        android:id="@+id/bt"
            android:layout_width="wrap_content"
    android:layout_height="wrap_content"
        android:text="点击改变fragment2的文字 "
        />

</LinearLayout>

fragment2.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="#ff0000"
    android:orientation="vertical" >
    

    <TextView 
        android:id="@+id/tv"
        android:layout_width="wrap_content"
    android:layout_height="wrap_content"
	android:text="我是文本"
        />
</LinearLayout>

MainActivity.java

package com.example.firstfragment;

import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;



public class MainActivity extends Activity
{

	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//仅仅展示了怎样在MainActivity获得Fragment对象
//		FragmentManager fm = getFragmentManager();
//		Fragment1 fragment1 = (Fragment1) fm.findFragmentById(R.id.fragment1);//找到第一个Fragment
//		
		
	}

	

}

Fragment1.java

package com.example.firstfragment;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class Fragment1 extends Fragment
{

	/**
	 * 当Fragment被创建时候调用的方法,返回当前Fragment显示的内容
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)
	{
		View view = inflater.inflate(R.layout.fragment1, null);
		
		Button bt = (Button) view.findViewById(R.id.bt);
		
		bt.setOnClickListener(new OnClickListener()
		{
			
			@Override
			public void onClick(View v)
			{
				System.out.println("按钮被点击");
				Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentById(R.id.fragment2);//建立联系
				fragment2.setText("一点击就改变");
			}
		});
		
		
		return view;
	}
}

Fragment2.java

package com.example.firstfragment;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment2 extends Fragment
{
	/**
	 * 当Fragment被创建时候调用的方法,返回当前Fragment显示的内容
	 */
	private TextView tv ;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)
	{
		View view = inflater.inflate(R.layout.fragment2, null);
		tv = (TextView) view.findViewById(R.id.tv);
		return view;
		
	}
	public void setText(String text)
	{
		tv.setText(text);
	}
}


你可能感兴趣的:(Fragment进行数据传递)