- 背景介绍:如我所知:在
Fragment中是没有对返回键的回调的。而Activity中是有这样的回调的。如onBackPressed();,onKeyDown(); - 实际需求:但是在实际项目中,可能就会有这样的需求:当页面处于长按状态,点击返回键就取消长按;当页面不是长按状态,点击返回键,就退出当前的宿主
Activity。(类似需求可以参考小米手机自带的图库App。[当然,小米的图库不一定是使用ViewPager+Fragment来实现的]); - 解决方式:就不说那么多了,直接给出我的解决方式吧,代码量很少,理解起来也很简单。
- 先看一段给
viewPager添加Fragment的代码:
- 先看一段给
private void InitViewPager() {
{
// add
Fragment fragmentA = new AFragment();
Fragment fragmentB = new BFragment();
Fragment fragmentC = new CFragment();
fragmentList = new ArrayList<Fragment>();
fragmentList.add(fragmentA);
fragmentList.add(fragmentB);
fragmentList.add(fragmentC);
}
viewPager = (ViewPager) findViewById(R.id.vPager);
viewPager.setAdapter(new ViewPagerAdapter(this
.getSupportFragmentManager(), fragmentList));
viewPager.setCurrentItem(0);
}
Activity`的返回键里面的逻辑
* 2. 在
@Override
public void onBackPressed() {
int currentItem = viewPager.getCurrentItem();
FragmentBackPressed fragment = (FragmentBackPressed) fragmentList
.get(currentItem);
fragment.onBackPressed();
}
- 大家可能在想
FragmentBackPressed这个到底是什么鬼?
- 大家可能在想
- ==这个就是一个定义的接口:里面的逻辑如下:
public interface FragmentBackPressed {
/**
* 碎片的返回事件
*/
void onBackPressed();
}
然后让viewPager 里面的所有的Fragment 都实现该接口,然后,在该接口里面处理逻辑即可。以下是基于我的实际需求的一个简化,逻辑如下:
* * * 1. 在实现类AFragment,BFragment,CFragment中:
@Override
public void onBackPressed() {
if (longClicked) {
// 取消按钮的逻辑处理
cancelLongClick();
return;
} else {
getActivity().finish();
}
}
代码很简单,简单解释一下:
* 首先这里一个boolean的标记longClicked是在长按点击的时候赋值为true,然后在cancelLongClick();里面赋值为false。cancelLongClick();里面就可以处理取消长按的逻辑。
- 基于以上几步就可以完成对
Fragment的返回键按下的事件进行处理。
* 总结:
1.定义一个接口FragmentBackPressed,里面有一个抽象方法void onBackPressed();;
2. 让所有希望返回键被处理的Fragment都去实现接口FragmentBackPressed,并重写void onBackPressed();
3. 每个Fragment 去处理自己的返回逻辑。比如:当Fragmnet被长按时,就取消长按,不finish宿主Activity,否则,就finish宿主Activity;
本文介绍了一种在Android应用中处理Fragment返回键的方法。通过定义FragmentBackPressed接口并让每个Fragment实现此接口,可以在Fragment中响应返回键事件。文章还提供了一个具体的实现案例。
1951

被折叠的 条评论
为什么被折叠?



