Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android startActionMode无法解决

Android startActionMode无法解决
EN

Stack Overflow用户
提问于 2016-03-31 17:00:15
回答 2查看 1.3K关注 0票数 0

我遵循了一个教程(https://www.youtube.com/watch?v=8XR0cy3YgLo),稍微修改了它,然后合并了onLongClickListener (https://www.youtube.com/watch?v=jGW95imi9tw),其中所有的代码都可以正常工作,除了我希望使用CAB (上下文操作栏)来选择多个条目并能够删除所选的内容之外。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyAdapter extends RecyclerView.Adapter<MyHolder> {

Context c;
ArrayList<Player> players;
ActionMode mActionMode;

..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//View Holder Initialised
    @Override
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    //View obj
    View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);

    //Holder
    MyHolder holder=new MyHolder(v);
    return holder;
}

//Data is bound to views
@Override
public void onBindViewHolder(MyHolder holder, int position) {
    holder.nameTxt.setText(players.get(position).getName());
    holder.posTxt.setText(players.get(position).getPosition());
    holder.img.setImageResource(R.drawable.marker);

    //When view is clicked
    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onItemClick(View v, int pos) {
            Snackbar.make(v,players.get(pos).getName() + " 1 ", Snackbar.LENGTH_SHORT).show();
        }
    });

    holder.setItemLongClickListener(new ItemLongClickListener() {
        @Override
        public void onItemLongClick(View v, int pos) {
            mActionMode = startActionMode(new ActionMode.Callback() {
                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    mode.setTitle("Selected");

                    MenuInflater inflater = mode.getMenuInflater();
                    inflater.inflate(R.menu.contextual_menu, menu);
                    return true;
                }

                @Override
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                    return true;
                }

                @Override
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                    switch (item.getItemId()) {
                        case R.id.action_delete:
                            //deleteClicked();
                            mode.finish();
                            return true;
                        default:
                            //doneClicked();
                            return false;
                    }
                }

                @Override
                public void onDestroyActionMode(ActionMode mode) {
                }
            });
        }
    });
}

因此,我遇到的问题是'mActionMode =startActionMode(新的ActionMode.Callback() {‘)不能工作,因为'startActionMode’无法解决。

我知道startActionMode属于AppCompat,但我无法理解如何初始化CAB。我环顾四周,似乎找不到确切的答案,所以希望能有任何帮助来解决这个问题。

编辑

我现在已经设法通过长点击处理程序(在本教程之后:http://www.startingandroid.com/how-to-use-sqlite-database-in-android/)显示CAB (上下文操作栏),但我无法实际获得对给定项的引用。目前,单击任何项目都会弹出CAB,但我没有引用单击的项目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public UserViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_row, parent, false);
    UserViewHolder userViewHolder = new UserViewHolder(v);

    v.setClickable(true);

    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Snackbar.make(v, "CLICK", Snackbar.LENGTH_SHORT).show();
        }
    });

    v.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Snackbar.make(v, "LONG CLICK", Snackbar.LENGTH_SHORT).show();
            if (mActionMode != null) {
                return false;
            }
            v.startActionMode(new ActionMode.Callback() {
                @Override
                public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                    MenuInflater inflater = mode.getMenuInflater();
                    inflater.inflate(R.menu.context, menu);
                    return true;
                }

                @Override
                public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                    return false;
                }

                @Override
                public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                    //get number of selected items

                    switch (item.getItemId()) {
                        case R.id.context_favourite:
                            //SQL - Favourite Item
                            mode.finish();
                        case R.id.context_delete:
                            //SQL - Delete Item
                            mode.finish();
                    }
                    return false;
                }

                @Override
                public void onDestroyActionMode(ActionMode mode) {
                    mActionMode = null;
                }
            });
            return true;
        }
    });
    return userViewHolder;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-31 17:16:51

只有当您在某个活动中或您有要进行该调用的活动的引用时,startActionMode才是可用的方法。

从您的代码中,您实际上是从您的MyAdapter类(它不是Activity )调用它。

票数 0
EN

Stack Overflow用户

发布于 2017-11-10 11:16:09

使用view.startActionMode

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ViewHolder extends RecyclerView.ViewHolder implements
        View.OnClickListener,
        View.OnLongClickListener {

    public ViewHolder(View view) {
        super(view);
        view.setOnClickListener(this);
        view.setOnLongClickListener(this);
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    public boolean onLongClick(View view) {
        view.startActionMode(...);
        return true;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36346329

复制
相关文章
Android应用开发:Genymotion无法启动解决
当我们安装完Virtual Box、Genymotion以及Android Studio上的Genymotion插件后,通过Android studio启动Genymotion安卓模拟器可能会遇到无法连接Virtual Box的情况,这往往是虚拟网络的配置问题导致的。
用户8710806
2021/06/08
1.6K0
解决Linux无法打开android模拟器问题
笔者最近重新安装了系统(deepin),但随之带来了一个问题,就是无法创建Android模拟器。其实这个问题我倒是在之前遇到过2次,很好解决,删除'yourPath'/Sdk/emulator/lib64/libstdc++.so就行了。 也可以链接一个本机的libstdc++:
JarvanMo
2018/09/06
2.7K0
android UiAutomator了解源码解决控件bonds[0,0]无法点击
本人在学习UiAutomator的时候,偶然碰到一些控件的bounds竟然是[0,0][0,0]的情况,十分费解,能找到就是无法点击,或者层级太复杂,比如说京东app领取优惠券的页面,我想根据优惠券内容选择点击有方的“立即领取”按钮等等。这里分享一下自己写的方法,说一下是用获取上一次的控件的尺寸来计算坐标的。
FunTester
2019/08/22
7510
★ Android ExpandableListView中子元素无法点击 解决方案!
这几天公司写个电商项目,写道购物车页面,发现ExpandableListView点击子类的方法无效!!
全栈程序员站长
2021/04/07
6730
Android:解决debug版本无法运行的问题
在用Android Studio做开发时,如果将build之后的app-debug版本发给用户,用户会无法安装。这里有两种解决方案:
zstar
2022/06/14
1.2K0
解决android studio 无法更新插件的问题(某些)
我相信很有朋友会像我一样遇到这样的情况:android studio 提示插件需要更新,但是由于网络的原因,无法更新,这里笔者提供GsonFormat和genymotion的最新jar包下载地址,每次提示更新就去这里下载最新的就好了。
103style
2022/12/19
1.3K0
解决Android的WebView无法打开PDF的方案
最近自家产品开发使用中收到反馈,安卓内嵌网页无法打开PDF,而IOS可以打开。其实安卓无法打开分以下几种情况:
一冷
2023/07/12
4K0
解决Android的WebView无法打开PDF的方案
Android 高版本无法抓取 HTTPS解决方案
在接口测试中,相信很多人都遇到过 Android 高版本(Android7.0 以上)系统无法抓取HTTPS包的问题。
用户6780590
2020/11/24
2.8K0
Android 高版本无法抓取 HTTPS解决方案
Android Studio 3.1无法导入模块的解决办法
3月份Android Studio 3.1版正式发布,谁知新版本搞出了新问题,譬如导入已有的模块,Android Studio就死活无法正常导入。摸索了很久,才算总结出模块导入的几点解决办法: 一、依次选择菜单“File”——“New”——“Import Module”,按提示导入具体的demo。此时Android Studio 3.1毫无反应,既不重编也不在左侧列表添加新模块。此时要打开项目的settings.gradle,把下面这行:
aqi00
2019/01/18
2.7K0
Android使用WebView开发常见的坑
现在的App基本上都会使用Native+H5的方式来开发的,例如网易新闻详情页面,微信公号详情页面都会使用WebView开发。这样可以很容易实现图文排版的需求,而且混合开发的好处也是显而易见的。
阳仔
2019/07/31
2K0
Android使用WebView开发常见的坑
Android Studio 无法预览xml布局视图的解决办法
? ? ?
拾点阳光
2018/08/02
2K0
Android Studio 无法预览xml布局视图的解决办法
【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )
这是从 Dex 文件中加载 Activity 组件类 , 然后启动该 Activity 组件 , 报上述错误 ;
韩曙亮
2023/03/30
1.3K0
【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )
点击加载更多

相似问题

startActionMode返回空

42

Android : startActionMode片段只在onActivityCreated中工作

14

getSherlockActivity().startActionMode返回null

12

,startActionMode()不被调用

11

从片段调用startActionMode

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文