码迷,mamicode.com
首页 > 其他好文 > 详细

Activity和Fragment进行通信的3种方式

时间:2015-06-16 21:16:33      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

------------------------------------------------Activity发消息给Fragment-----------------------------------------------

技术分享

MainActivity

package com.example.handlerway;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {
	private Handler mHandler;
	private EditText edit;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		edit = (EditText) findViewById(R.id.edit);
	}

	/**
	 * 我们需要在Activity中定义一个方法用来设置Handler对象。
	 */
	public void setHandler(Handler handler) {
		mHandler = handler;
	}

	public void button(View view) {
		HandlerFragment arg = new HandlerFragment();
		FragmentManager fragmentManager = getFragmentManager();
		FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
		fragmentTransaction.replace(R.id.layout_fragment, arg);
		fragmentTransaction.commit();
	}

	/**
	 * 然后我们可以在Activity中发送消息给Fragment中的Hanlder进行交互。
	 */
	public void inter(View view) {
		Message msg = new Message();
		msg.obj = edit.getText().toString();
		msg.what = 1;
		//发送消息
		mHandler.sendMessage(msg);
	}
}

HandlerFragment

package com.example.handlerway;

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

public class HandlerFragment extends Fragment {

	private TextView text;
	private MainActivity mActivity;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_handler, container, false);
		text = (TextView) view.findViewById(R.id.text);

		return view;
	}

	public Handler mHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 1:
				text.setText((String) msg.obj);
				break;
			}
		};
	};

	/**
	 * 在Fragment中的回调函数onAttach()中得到Fragment所在Activity,并调用setHandler方法,设置Handler。
	 * 该Handler在Fragment中定义,用来接收消息与Fragment进行交互。
	 */
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		mActivity = (MainActivity) activity;
		mActivity.setHandler(mHandler);
	}
}

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:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="10dp" >

    <FrameLayout
        
        android:id="@+id/layout_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请先添加点击添加Fragment,并输入你要传递的消息"
        android:lines="5"
        android:padding="5dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="button"
        android:padding="10dp"
        android:text="这个按钮是添加一个Fragment" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="inter"
        android:padding="10dp"
        android:text="这个按钮是发送一个消息给Fragment" />

</LinearLayout>

fragment_handler.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:background="#F4A460"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:padding="10dp"
        android:textSize="20dp" />

</LinearLayout>

------------------------------------------------Fragment发消息给Activity-----------------------------------------------

技术分享

技术分享

MainActivity

package com.example.handlerway;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {
	private Handler mainActivityHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 1:
				edit.setText((CharSequence) msg.obj);
				break;

			default:
				break;
			}
		};
	};
	private EditText edit;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		edit = (EditText) findViewById(R.id.edit);
	}


	public void button(View view) {
		HandlerFragment arg = new HandlerFragment(mainActivityHandler);
		FragmentManager fm = getFragmentManager();
		FragmentTransaction ft = fm.beginTransaction();

		ft.replace(R.id.layout_fragment, arg);
		Bundle args = new Bundle();
		args.putString("bbb", "aaa");
		arg.setArguments(args);
		ft.commit();
	}

}

HandlerFragment

package com.example.handlerway;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class HandlerFragment extends Fragment implements OnClickListener {

	private TextView text;
	private MainActivity mActivity;

	private EditText editText;
	private Button button;
	// 接受handler
	private Handler fragmentHandler = new Handler();

	public HandlerFragment(Handler mainActivityHandler) {
		super();
		this.fragmentHandler = mainActivityHandler;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_handler, container,
				false);
		text = (TextView) view.findViewById(R.id.text);
		editText = (EditText) view.findViewById(R.id.editText);
		button = (Button) view.findViewById(R.id.button);

		button.setOnClickListener(this);

		if (getArguments().getString("bbb").equals("aaa")) {
			editText.setText("尼玛");
		}

		return view;
	}

	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		mActivity = (MainActivity) activity;
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == R.id.button) {
			// 发送消息给activity
			Message msg = new Message();
			msg.obj = editText.getText().toString();
			msg.what = 1;
			fragmentHandler.sendMessage(msg);
		}
	}
}

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:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="10dp" >

    <FrameLayout
        android:id="@+id/layout_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >
    </FrameLayout>

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请先添加点击添加Fragment,并输入你要传递的消息"
        android:lines="5"
        android:padding="5dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="button"
        android:padding="10dp"
        android:text="Click to add a fragment" />


</LinearLayout>

fragment_handler.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:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="10dp" >

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp" />

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

    </EditText>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

----------------------------第4种方式  接口方式,下篇博客在更,下班回家着急----------------------------------------

Activity和Fragment进行通信的3种方式

标签:

原文地址:http://blog.csdn.net/u013210620/article/details/46522271

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!