片段中的上下文操作栏

时间:2014-09-19 21:49:48

标签: android

是否有人有教程在使用支持库v7(appcomat_v7)的片段中实现CAB?

我找不到任何加上developer.android教程是不明确的。

到目前为止,这是我的代码。我正在做一个简单的测试程序,当您在列表中选择项目时,将出现上下文操作栏,其中显示了您选择x项目并显示删除按钮等内容。

我试图在一个片段中这样做,所以这里发布的所有代码都在片段内。

上下文栏XML文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:idk="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/menu_delete"
        android:icon="@android:drawable/ic_menu_delete"
        android:orderInCategory="100"
        idk:showAsAction="ifRoom|withText"
        android:title="Delete"/>

</menu>

这是ActionMode.Callback接口的实现

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback()
{

    // Called when the user selects a contextual menu item
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) 
        {
            // TODO Auto-generated method stub
            switch(item.getItemId())
            {
            case R.id.menu_delete:
                return true;

            }

            return false;
        }


        //// Called when the action mode is created; startActionMode() was called
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu)
        {
            // TODO Auto-generated method stub
            mode.getMenuInflater().inflate(R.menu.delete_only, menu);
            return true;
        }

         // Called when the user exits the action mode
        @Override
        public void onDestroyActionMode(ActionMode mode) 
        {
            // TODO Auto-generated method stub
            mActionMode = null;
        }

        //// Called each time the action mode is shown. Always called after onCreateActionMode, but
        // may be called multiple times if the mode is invalidated.
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu)
        {
            // TODO Auto-generated method stub
            return false;
        }
};

这是列表视图的项目点击监听器

@Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) 
    {
        // TODO Auto-generated method stub
        if(listItemSelections.contains(1) && mActionMode == null)
        {
            mActionMode = getActivity().startActionMode(mActionModeCallback);
        }

    }

这是给我错误的行

mActionMode = getActivity().startActionMode(mActionModeCallback);

它说

The method startActionMode(ActionMode.Callback) in the type Activity is not applicable for the arguments (ActionMode.Callback)

我不知道该怎么做,我找不到解释片段中的实现并使用支持库的教程。

感谢您的阅读。

2 个答案:

答案 0 :(得分:1)

如果您使用的是支持库,则应使用

mActionMode = getActivity().startSupportActionMode(mActionModeCallback);

而不是

mActionMode = getActivity().startActionMode(mActionModeCallback);

检查更多详情Support v7 ActionMode CallBack

答案 1 :(得分:1)

如果您使用的是动作条库,请使用此功能。

 ActionBarActivity activity=(ActionBarActivity)getActiivty();
 activity.startSupportActionMode(mActionModeCallback);

如果它是简单的活动,那么更喜欢这个

 getActivity().startActionMode(mActionModeCallback);