我为按钮设置上下文操作模式为什么点击 上下文操作 按钮就马上闪退呢,代码和老师的应该一样的

我为按钮设置上下文操作模式为什么点击 上下文操作 按钮就马上闪退呢,代码和老师的应该一样的

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //ctx_button:演示contextmenu
        //注册
//        registerForContextMenu(findViewById(R.id.ctx_btn));
        //创建

        //菜单项的操作

        //为按钮设置上下文操作模式
        //1.实现ActionModeCallBack
        //2.在view的长按事件中去启动上下文模式
        findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener(){
            @Override
            public boolean onLongClick(View v) {
                startActionMode((android.view.ActionMode.Callback) cb);
                return false;
            }
        });

    }
    ActionMode.Callback cb = new ActionMode.Callback(){
        //创建,在启动上下文操作模式(startActionMode(Callback))时调用
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            Log.e("TAG","创建");
            getMenuInflater().inflate(R.menu.context,menu);
            return true;
        }

        //在创建方法后进行使用
        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            Log.e("TAG","准备");
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            Log.e("TAG","点击");
            switch (menuItem.getItemId()){
            case R.id.delete:
                Toast.makeText(MainActivity.this,"删除",Toast.LENGTH_SHORT).show();
                break;
            case R.id.opera1:
                Toast.makeText(MainActivity.this,"操作1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.opera2:
                Toast.makeText(MainActivity.this,"操作2",Toast.LENGTH_SHORT).show();
        }
            return true;
        }

        //上下文操作模式结束时调用
        @Override
        public void onDestroyActionMode(ActionMode actionMode) {
            Log.e("TAG","结束");
        }
    };


//    @Override
//    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
//        getMenuInflater().inflate(R.menu.context,menu);
//    }

    //创建optionmenu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //加载菜单资源
        getMenuInflater().inflate(R.menu.option,menu);
        return true;
    }

//    @Override
//    public boolean onContextItemSelected(MenuItem item) {
//        switch (item.getItemId()){
//            case R.id.delete:
//                Toast.makeText(this,"删除",Toast.LENGTH_SHORT).show();
//                break;
//            case R.id.opera1:
//                Toast.makeText(this,"操作1",Toast.LENGTH_SHORT).show();
//                break;
//            case R.id.opera2:
//                Toast.makeText(this,"操作2",Toast.LENGTH_SHORT).show();
//        }
//        return super.onContextItemSelected(item);
//    }

    //OptionMenu菜单项的选中方法
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.save:
                Toast.makeText(this,"保存",Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(this,"设置",Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit:
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2019-05-08 11:34:34

1)测试了你的代码,代码没有问题呀。2)除非是xml的问题?你再看一下xml或者你看下报的什么错误。3)另外你需要长按“上下文菜单”这个按钮再试试。祝:学习愉快

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师