粗浅理解接口在Android开发中的用途

一直认为程序中写接口的都是大神级人物,自己不是大神就不用写接口,这样的理解让我很长时间都回避了接口的学习,最近自己用到了接口,有了自己粗浅的理解。下面是一个经典的场景:

当我们在Activity中调用Fragment弹出框,弹出框里面有个按钮,如果我想实现点击一次按钮,就通知Activity中一个TextView上显示的数字加一,该怎么实现?如果是以前我可能会想用Handle来实现,但是现在用接口,这也就理解了为什么叫接口回调:接口定义在Fragment中,但是实现在Acitivity中,Fragment中事件需要Activity来响应。

来看一个demo:在Activity中需要显示一个Frament

private void showFragment(BaseGoods vagetable) {
		Bundle args = new Bundle();
		args.putSerializable("goods", vagetable);
		FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
		ModalFragment modalFragment = new ModalFragment();
		modalFragment.setNotify(new ModalFragment.NotifyDataChangeListener() {
			@Override
			public void onGoodsNumChanage(int position, int goodsNum) {

			}

			@Override
			public void onDelete(int position) {

			}

			@Override
			public void onWaitChanage(int position) {

			}
		});
		modalFragment.setArguments(args);
		ft.setCustomAnimations(R.anim.bottom_enter, R.anim.bottom_exit,
				R.anim.bottom_enter, R.anim.bottom_exit);
		ft.add(R.id.real_container, modalFragment, "modal");
		ft.addToBackStack(null);
		ft.commit();
	}


Framgent:

public class ModalFragment extends Fragment {

	private Modal mModal;
	private int mPosition;
	private String mGoodsName;
	private float mGoodsPrice;
	private int mGoodsNum;
	private ContentValues mItem;

	private NotifyDataChangeListener mNotifyNum;

	public interface NotifyDataChangeListener {
		public void onGoodsNumChanage(int position, int goodsNum);

		public void onDelete(int position);

		public void onWaitChanage(int position);
	}

	public void setNotify(NotifyDataChangeListener l) {
		mNotifyNum = l;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		mModal = new Modal(getActivity());
		return mModal.getMidalContainer();
	}
	mModal.setOnPlusButtonClickListener(new Modal.OnPlusButtonClickListener() {

			@Override
			public void onClick(int num) {
				mGoodsNum++;

				chanageNoBuy();
				// mNotifyNum.onWaitChanage(mPosition);

				chanageDataBaseNum(num);
				mNotifyNum.onGoodsNumChanage(mPosition, num);
			}
		});
}


Fragment中定义了一个
NotifyDataChangeListener 接口,里面有三个方法,
Fragment中还有个接口的全局变量和

public void setNotify(NotifyDataChangeListener l) {
mNotifyNum = l;
}

在Activity中调用这个方法

modalFragment.setNotify(new ModalFragment.NotifyDataChangeListener() {
			@Override
			public void onGoodsNumChanage(int position, int goodsNum) {

			}

			@Override
			public void onDelete(int position) {

			}

			@Override
			public void onWaitChanage(int position) {

			}
		});
并实现其中的三个方法,
当Fragment中点点击事件调用了全局变量的mNotifyNum.onWaitChanage(mPosition);方法的时候,就会去回调实现接口的方法,也就是Activity中的
@Override
			public void onWaitChanage(int position) {

			}

这样也就实现了,在Fragment中操纵Activity,发散一下思维,也就是遇到当一个实现类想操纵使用它的父类的时候就可以用接口,我知道这样的说法不正确,但是就是那么个意思,我理解的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值