关于使用ActionMode做长按事件报空问题
2016-08-27 10:27
447 查看
在6.0奇葩问题中,我已经对此问题分析过了,但是并没有一个很好的解决方案,虽然开了开发版本,但是导致对于的开发版本已经会出现长按报null问题!最近在查看源码时发现,在分析ActionBarContextView类时发现,ActionMode初始化时走了initTitle()此方法!而当时长按报出的异常如下
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object reference下面为源码,其中只有一个地方为onClickListener:
public void initForMode(final ActionMode mode) { if (mClose == null) { LayoutInflater inflater = LayoutInflater.from(mContext); mClose = (NineLinearLayout)inflater.inflate(R.layout.abs__action_mode_close_item, this, false); addView(mClose); } else if (mClose.getParent() == null) { addView(mClose); } View closeButton = mClose.findViewById(R.id.abs__action_mode_close_button); closeButton.setOnClickListener(new OnClickListener() { //此处,也就是说, 他没有findViewById成功导致的此问题 public void onClick(View v) { mode.finish(); } }); final MenuBuilder menu = (MenuBuilder) mode.getMenu(); if (mActionMenuPresenter != null) { mActionMenuPresenter.dismissPopupMenus(); } mActionMenuPresenter = new ActionMenuPresenter(mContext); mActionMenuPresenter.setReserveOverflow(true); final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); if (!mSplitActionBar) { menu.addMenuPresenter(mActionMenuPresenter); mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); mMenuView.setBackgroundDrawable(null); addView(mMenuView, layoutParams); } else { // Allow full screen width in split mode. mActionMenuPresenter.setWidthLimit( getContext().getResources().getDisplayMetrics().widthPixels, true); // No limit to the item count; use whatever will fit. mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE); // Span the whole width layoutParams.width = LayoutParams.MATCH_PARENT; layoutParams.height = mContentHeight; menu.addMenuPresenter(mActionMenuPresenter); mMenuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this); mMenuView.setBackgroundDrawable(mSplitBackground); mSplitView.addView(mMenuView, layoutParams); } mAnimateInOnLayout = true; }
这个点击事件是将actionMode finish掉,也就是调用ActionMode最左边的按钮我又跑到代码中寻找左边按钮的布局,最后发现
android.support.v7.internal.widget.TintImageView
也就是说他调用的V7包!
然后我看了一下项目的activity,发现继承的是Activity,于是尝试使用v7中的AppCompatActivity,然后此问题解决!
AppCompatActivity
更2016.8.19日:
在实际发现一个很严重的问题,无法修改actionMode的样式了,所以就继续寻找,发现:
<item name="*android:closeItemLayout">@layout/ty_material_action_mode_close_item</item>
在value样式中,将v21和value中的此样式注销也可以解决,估计是国内厂家对底层进行了修改,导致此问题!(我在用向外的测试机测试无此问题!)
相关文章推荐
- Jsp页面关于BootStrap模态框和<a href onclick>事件不能同时使用,以及传参的问题
- 关于easyui插件使用过程中,onkeyup等事件失效问题
- 关于UseSubmitBehavior和OnClientClick同时使用,导致无法触发后台事件的问题
- 关于UseSubmitBehavior和OnClientClick同时使用,导致无法触发后台事件的问题
- C#写的计数器控件 - 一个关于相对路径使用的问题
- 问个关于VS使用上的问题
- 关于统计的一个sql问题,使用动态sql语句实现。
- 关于CPtrList使用中的一个问题
- 关于win2003企业版中FSO组件不能使用的问题
- 关于您提到使用WebServices时候遇到“基础连接以关闭”的问题
- 使用VC6时:关于WinAPI的版本问题。
- 刚才遇到了关于C#使用外部DLL函数上的char*的问题。
- 关于多线程使用的问题
- 关于shm_open和shm_unlink的使用问题
- 关于GetRecordCount函数的使用问题
- 关于delphi里面使用QUICK REPORT 打印的种种问题
- 关于GetRecordCount函数的使用问题
- [转贴]关于PHP事件驱动问题之我见
- 关于使用VS.Net2003调试器出现的问题及相关解决方法