现在的位置: 首页 > 综合 > 正文

Fragment与Fragment之间的通信

2018年02月08日 ⁄ 综合 ⁄ 共 3382字 ⁄ 字号 评论关闭

Fragment是Activity上的碎片,Fragment之间可以进行信息交互。

MainActivity.java代码如下:

public class MainActivity extends FragmentActivity {

	private FragmentManager manager;
	private FragmentTransaction transaction;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		/*获取manager*/
		manager = this.getSupportFragmentManager();
		/*创建事物*/
		transaction = manager.beginTransaction();
		/*创建leftFragment*/
		LeftFragment leftFragment = new LeftFragment();
		/*创建RightFragment*/
		RightFragment rightFragment = new RightFragment();
		/*通过事物把两个fragment分别添加到对应的容器中*/
		transaction.add(R.id.left, leftFragment, "left");
		transaction.add(R.id.right, rightFragment, "right");
		/*提交事物*/
		transaction.commit();
	}


}

LeftFragment.java代码如下:

public class LeftFragment extends Fragment {

	private Button button;
	private FragmentManager manager;
	
	public LeftFragment() {
		
	}

	/*在onCreate方法里面进行相关数据的初始化*/
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		/*获取manager*/
		manager = getFragmentManager();
		
	}
	
	/*这个方法是适合做数据的更新操作*/
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		/*动态加载布局*/
		View view = inflater.inflate(R.layout.left, null);
		/*从动态布局中获取按钮*/
		button = (Button) view.findViewById(R.id.button1);
		/*设置按钮的监听事件*/
		button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				/*通过manager获取右侧的Fragment(千万不能去new RightFragment对象,因为在Mainactivity中,我们通过事物把,RightFragment添加到布局中了,所以只能通过manager获取)*/
				RightFragment rightFragment = (RightFragment) manager.findFragmentById(R.id.right);
				/*获取文本框输入值*/
				String msg = ((EditText)rightFragment.getView().findViewById(R.id.editText2)).getText().toString();
				/*打印*/
				Toast.makeText(getActivity(), "-right->>" + msg, 1).show();
			}
		});
		return view;
	}
	
	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
	}
}

RightFragment.java代码如下:

public class RightFragment extends Fragment {

	private Button button;
	private FragmentManager manager;
	
	public RightFragment() {
		
	}

	/*在onCreate方法里面进行相关数据的初始化*/
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		/*获取manager*/
		manager = getFragmentManager();
		
	}
	
	/*这个方法是适合做数据的更新操作*/
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		/*动态加载布局*/
		View view = inflater.inflate(R.layout.right, null);
		/*从动态布局中获取按钮*/
		button = (Button) view.findViewById(R.id.button2);
		/*设置按钮的监听事件*/
		button.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				
				/*通过manager获取左侧Fragment*/
				LeftFragment leftFragment = (LeftFragment) manager.findFragmentById(R.id.left);
				/*获取左侧文本框的值*/
				String msg = ((EditText)leftFragment.getView().findViewById(R.id.editText1)).getText().toString();
				/*打印*/
				Toast.makeText(getActivity(), "-left->>" + msg, 1).show();
			}
		});
		return view;
	}
	
	@Override
	public void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
	}
}

activity_main.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="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity" >

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

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

left.xml和right.xml的代码就不贴了,都比较简单!

demo效果:

抱歉!评论已关闭.