您的位置:首页 > 其它

viewpager+fragment+listview registerForContextMenu

2016-04-13 11:36 453 查看

1.需求描述

viewpager  +  fragment   ,每个fragment 中的布局都是listview ,listview 支持点击(OnItemClick)和长按(registerForContextMenu),  点击进入详情页面;每次长按弹出
MeunItem 之后,点击MeunItem  弹出提示框提示用户是否删除,用户点击确定即可删除该行。

       2.问题描述

点击事件没问题的实现。可是长按出现了问题,每次长按弹出 MeunItem 之后,点击MeunItem  弹出提示框提示用户是否删除,此时点击删除出现空指针,发现每次弹框的数量 是当前fragment 的预加载的数量,意思就是,当我点击弹出框的取消按钮或者 点提示框外部区域,这个提示框消失了,后面还有提示框,而且数量正好是当前fragment
所决定的。而当前面的一个或者2个提示框消失以后,再点击删除就没有出现空指针,那么问题应该就是和预加载有很大的关系了。

3.解决方法

(1)fragment 是通过newInstance 来new 出来,每次传入当前位置,在当前fragment 记下传入的position
public static ServiceOrderFragment newInstance(int position) {
ServiceOrderFragment f = new ServiceOrderFragment();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
return f;
}




(2)获取当前fragment 在viewpager 中的位置,可以在 fragment 的宿主activity中 公开一个方法,获取位置 
public int getCurFragmentIndex() {
return mViewPager.getCurrentItem();
}
(3)在当前fragment
的 onContextItemSelected  方法中,
   int curIndex = ((ServiceOrderActivity) getActivity()).getCurFragmentIndex();  
获取到当前fragment 所在位置,然后用  newInstance(int position)记录的position
 和 curIndex 作对比,相等的时候才去 显示 提示框。
   这样,就可以控制弹框到底属于哪个fragment 了。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: