处理某一Fragment返回键

需求:从fragmentA到fragmentB ,在fragmentB页面编辑之后,返回fragmentA ,默认不会重新加载fragmentA ,这里需要加载新数据

解决方法

1. 输出fragment生命周期,返回后没有输出,说明不能通过生命周期来加载新数据

2. 重写onBackPressed事件,尝试成功

主要代码

在Activity中

	@Override
	public void onBackPressed() {
		super.onBackPressed();
		final FragmentA fragment = (FragmentA) getSupportFragmentManager()
				.findFragmentByTag("fragment_a");
		if (fragment != null) {
			fragment.onBackPressed();
		}
	}

在FragmentB

public void onBackPressed() {
		//这里写返回逻辑,我写的是跳转到FragmentA
	}
遇到fragment为空的问题,因为findFragmentByTag找不到那个fragment,需要添加进去。又因为fragment不能重复add,所以要做个判断

这里是从FragmentA跳转到FragmentB的代码

FragmentB newFragment = new FragmentB();
		newFragment.newInstance(1, MainActivity.this);
		FragmentTransaction transaction = getSupportFragmentManager()
				.beginTransaction();
		FragmentB fragment = (FragmentB) getSupportFragmentManager()
				.findFragmentByTag("fragment_a");
		if (fragment == null) {
			transaction.add(newFragment, "fragment_a");
		}
		transaction.replace(R.id.fragment_a, newFragment);
		transaction.addToBackStack(null);
		transaction.commit();
另外,如果用findFragmentById,需要在MainActivity的layout文件中添加fragmentB,然后add要不然找不到

网上说的还有一种方法,试了下没有起作用,还没弄明白,代码如下

getView().setOnKeyListener( new OnKeyListener()
{
    @Override
    public boolean onKey( View v, int keyCode, KeyEvent event )
    {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            Toast.makeText(getActivity(),"Clicked", Toast.LENGTH_SHORT).show();
        }
        return false;
    }
} );


参考:

http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press

http://stackoverflow.com/questions/15525111/getsupportfragmentmanager-findfragmentbyid-returns-null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值