framelayout上的setOnLongClickListener未按预期工作

时间:2015-04-05 12:58:16

标签: android android-layout android-fragments

提到的Bellow是我为长按一下监听器事件注册framelayout的代码。

private void createActivityLayout(Fragment fragment) 
{
    FrameLayout frameLayout =     (FrameLayout)getLayoutInflater().inflate(R.layout.professional_pa_frame_layout, null, false);

    frameLayout.setClickable(true);

    frameLayout.setOnLongClickListener(new View.OnLongClickListener() 
    {
        public boolean onLongClick(View view) 
        {
            if (actionMode == null)
            {
                return false;
            }

            actionMode = view.startActionMode(actionModelCallback);
            view.setSelected(true);
            return false;
        }
    });

    getFragmentManager().beginTransaction().add(id, fragment, tag).commit();
}

片段内部包含一系列edittext实例或单个imageview实例。

每当在framelayout上执行长按时,我猜想会显示edittext的上下文操作栏。我认为该事件由editext捕获,并显示不同的上下文操作栏。每当我在framelayout中获得长按事件时,都会显示上下文操作栏的PFA图像。

enter image description here

如何在我的framelayout上整体捕获长按事件,而不显示其内部视图的上下文操作栏。下面写的xml代码是我想要为我的framelayout显示的上下文操作栏。

<item android:id="@+id/action_discard_notes"
    android:icon="@drawable/discard_note"
    android:title="@string/action_discard_notes"
    android:showAsAction="always" 
    android:orderInCategory="1"/>

1 个答案:

答案 0 :(得分:1)

您需要设置Edittext的 ActionModeCallback ,以便CAB中止并调用Framelayout长按以下代码...

    m_editText.setCustomSelectionActionModeCallback(new Callback()
            {

                @Override
                public boolean onCreateActionMode(android.view.ActionMode p_mode, Menu p_menu)
                {
                    return false;
                }
                @Override
                public boolean onPrepareActionMode(android.view.ActionMode p_mode, Menu p_menu)
                {                   
                    return false;
                }

                @Override
                public void onDestroyActionMode(android.view.ActionMode p_mode)
                {
                }

                @Override
                public boolean onActionItemClicked(android.view.ActionMode p_mode, MenuItem p_item)
                {
                    return false;
                }
            });

您需要在 onCreateActionMode 中为中止CAB(上下文操作栏)返回false。