Fragment和Activity通信中体现的接口回调

本文详细解析了一个经典例子,阐述了如何在Android应用中利用接口回调机制实现两个Fragment之间的资源共享。通过实例代码,解释了左Fragment如何将操作结果通过接口回调传递给右Fragment,并在MainActivity中实现了具体的响应逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个很经典的例子说的是,小王有个数学问题要问小李,小李一时没做出来,对小王说,我先记着等我知道答案了再打电话告诉你。

在这个例子中首先小王向小李问问题,这个时候小王要把自己这个对象发给小李,这样小李在回拨电话的时候才不会不知道要打给谁。其次是小王要有小李这个对象的引用,这样才知道打给谁。第三,有一个接口,通过这个接口小李可以把答案发给小王,因此小王必须继承这个接口。

这个经典的例子在我接口回调学习初期很难深入到可以理解真正的安卓代码应用,昨天我就遇到这么一个问题,苦苦思索一晚上,有了点头绪但不一定是对的,今天和大家一起讨论下。

在我的例子(网上经典例子)中有leftFragment 和 rightFragment两个Fragment;先将两个Fragment加入到MainActivity中;从leftFragment中做出的动作显示在rightFragment中。

先看leftFragment的代码:

package com.example.fragmentactivity;

import android.app.Activity;
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 LeftFragment extends Fragment implements OnClickListener {
	
	//Activity继承并实现这个接口即可实现资源的共享了
	public interface MyListener{
		public void showMessage(int x);
	}
	MyListener mylistener;
	Button firstButton;
	Button secondButton;
	Button thirdButton;</span>
//根据Fragment的生命周期,当Activity添加这个Fragment时候第一个调用的方法。通过此方法,Fragment获得了所在Activity的引用,</span>
//作用类似上述例子中的小李获得了小王的引用</span>
	@Override
	public void onAttach(Activity activity) {
		// TODO Auto-generated method stub
		mylistener=(MyListener) activity;
		super.onAttach(activity);
	}
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		View view = inflater.inflate(R.layout.leftfragment,null);
		return view;
		}
	@Override
	public void onResume() {
		firstButton = (Button) getView().findViewById(R.id.first_button);
		secondButton=(Button) getView().findViewById(R.id.second_button);
		thirdButton=(Button) getView().findViewById(R.id.third_button);
		firstButton.setOnClickListener(this);
		secondButton.setOnClickListener(this);
		thirdButton.setOnClickListener(this);
		
		
		// TODO Auto-generated method stub
		super.onResume();
	}
	@Override
	public void onClick(View v) {
		Button button=(Button) v;
		switch( button.getId()){ 
		case R.id.first_button:</span>
<span style="font-family: Arial, Helvetica, sans-serif;">//通过mylistener调用Activity具体实现这个方法。相当于小李回调小王,告诉小王答案。</span>
			mylistener.showMessage(1);
			break;
		case R.id.second_button:
			mylistener.showMessage(2);
			break;
		case R.id.third_button:
			mylistener.showMessage(3);
			break;
		}
	
	}
	</span>
接下来的是MainActivity

package com.example.fragmentactivity;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.TextView;

import com.example.fragmentactivity.LeftFragment.MyListener;

public class MainActivity extends Activity  implements MyListener{    //这里集成了具有回调函数的接口,小王的特征1
	
	TextView showMessageView;
<span style="white-space:pre">	</span>//这里是对接口函数的具体实现
	@Override //
	public void showMessage(int x) {
		showMessageView.setText("hello world");
				}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		FragmentManager fr= getFragmentManager();
		 FragmentTransaction tr=fr.beginTransaction();
		 //实例化两个Fragment
		 LeftFragment leftFragement = new LeftFragment();
		 RightFragment rightFragment = new RightFragment();
</pre><pre name="code" class="java">//这里的add函数将出发Fragment的onAttach函数,把当前引用的发送出去,相当于小王把自己的电话留给小李,小李知道答案后可以会拨给小王。
		tr.add(R.id.left_layout,leftFragement);
		tr.add(R.id.right_layout,rightFragment);
		tr.commit();
	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		showMessageView=(TextView) findViewById(R.id.right_show_message);
		super.onResume();
	}

}

总之这里的接口回调概念就体现的很彻底了,在本例中Activity让LeftFragment接受按钮出发,LeftFragment把接收到的信息回调给Activity。

总之我们看出这里面最主要的方法时tr.add这个方法,这个方法导致了哪些操作呢?下图说明了这一过程,具体涉及到Fragment和Activity的生命周期,这里就不具体讲了。


相关源代码免费下载:http://download.youkuaiyun.com/detail/shenlei190810/7720839


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值