错误为什么工作上下文动作模式启动ActionModeis不适用的参数(ActionMode [英] Error why working contextual action mode start ActionModeis not applicable for the arguments (ActionMode

查看:153
本文介绍了错误为什么工作上下文动作模式启动ActionModeis不适用的参数(ActionMode的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我下面的教程 11。练习:使用上下文动作模式

但我有此错误:

  mActionMode = Display.this.startActionMode(mActionModeCallback);
                view.setSelected(真);  错误:在此类活动的方法startActionMode(ActionMode.Callback)不适用于参数(ActionMode.Callback)

我查这个<一个href=\"http://stackoverflow.com/questions/24926558/the-method-startsupportactionmodeactionmode-callback-is-undefined-for-the-type\">stackoverflow回答
他们说,添加

  ActionBarActivity活性=(ActionBarActivity)getActivity();
activity.startSupportActionMode(modeCallBack);

我有这个错误

 的方法getActivity()是未定义的类型显示

我在做什么错了?下面是我的code。

 包com.example.sqlfirst;
进口android.os.Build;
进口android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.support.v4.app.FragmentTransaction;
进口android.support.v7.app.ActionBar;
进口android.support.v7.app.ActionBar.Tab;
进口android.support.v7.app.ActionBarActivity;
进口android.util.Log;
进口android.view.Menu;
进口android.app.Activity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.support.v4.app.NavUtils;
进口android.support.v7.app.ActionBarActivity;
进口android.support.v7.view.ActionMode;
进口android.view.ActionMode.Callback;
进口android.view.MenuInflater;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.Toast;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.GridView;
公共类显示扩展ActionBarActivity {
    私人最终静态字符串变量=MainActivity;
    受保护对象mActionMode;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){        super.onCreate(savedInstanceState);
        的setContentView(R.layout.grid_main);
         //必须使用getSupportActionBar从android.support.v7.app
       //动作条动作条= getSupportActionBar();
        //getActionBar().setDisplayHomeAsUpEnabled(true);        ActionBarActivity活性=(ActionBarActivity)getActivity();
        activity.startSupportActionMode(modeCallBack);          查看查看= findViewById(R.id.gridview);
            view.setOnLongClickListener(新View.OnLongClickListener(){
              //调用时,someView用户长时间点击
              公共布尔onLongClick(查看视图){
                如果(mActionMode!= NULL){
                  返回false;
                }                //使用以上定义的ActionMode.Callback启动CAB
                mActionMode = Display.this.startActionMode(mActionModeCallback);
                view.setSelected(真);
                返回true;
              }
            });
        GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
        gridview.setAdapter(新ImageAdapter(本));        gridview.setOnItemClickListener(新OnItemClickListener(){   公共无效onItemClick(适配器视图&LT;&GT;母公司,视图V,INT位置,长的id){
            //发送意图SingleViewActivity
       意图I =新意图(getApplicationContext(),SingleViewActivity.class);
       //传递图像索引
       i.putExtra(ID,位置);
       startActivity(ⅰ);
       }});        }
    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
         MenuInflater吹气= getMenuInflater();
            inflater.inflate(R.menu.activity_main_actions,菜单);
        返回super.onCreateOptionsMenu(菜单);
    }       公共布尔onOptionsItemSelected(菜单项项)
       {
          super.onOptionsItemSelected(项目);     开关(item.getItemId()){     案例R.id.ic_action_person:
         Toast.makeText(这一点,创建一个新帐户,请,Toast.LENGTH_SHORT).show();
           意向意图=新意图(这一点,Register.class);
             startActivity(意向);
         返回true;     案例R.id.ic_action_search:         Toast.makeText(这一点,搜索新形象,Toast.LENGTH_SHORT).show();
         意图ISEARCH =新意图(这一点,Search.class);
            startActivity(ISEARCH);
     返回true;     案例R.id.ic_action_picture:
         Toast.makeText(这一点,搜索新照片,Toast.LENGTH_SHORT).show();
         意图iphotos =新意图(这一点,Display.class);
         startActivity(iphotos);
         返回true;
     }
        返回true;
       }       私人ActionMode.Callback mActionModeCallback =新ActionMode.Callback(){         //创建行动模式时调用; startActionMode()被调用
         公共布尔onCreateActionMode(ActionMode模式,菜单菜单){
           //充气菜单资源提供上下文菜单项
           MenuInflater吹气= mode.getMenuInflater();
           //假设你有contexual.xml菜单资源
           inflater.inflate(R.menu.activity_main_actions,菜单);
           返回true;
         }         //调用时显示的动作模式各一次。之后总是叫
         // onCreateActionMode,但
         如果模式被无效//可以多次调用。
         在prepareActionMode公共布尔(ActionMode模式,菜单菜单){
           返回false;如果不采取//返回false
         }         //当用户选择上下文菜单项称为
         公共布尔onActionItemClicked(ActionMode模式,菜单项项){
           开关(item.getItemId()){
           案例R.id.ic_action_picture:
             Toast.makeText(Display.this,选定菜单
                 Toast.LENGTH_LONG).show();
             mode.finish(); //动作采摘,所以关闭CAB
             返回true;
           默认:
             返回false;
           }
         }         //当用户退出的动作模式称为
         公共无效onDestroyActionMode(ActionMode模式){
           mActionMode = NULL;
         }
       };}


解决方案

您显示类扩展ActionBarActivity,这意味着一个汇入作业活动使there's没有必要使用 getActivity(),就可以直接使用这样的方法:

 保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    / *这个方法是可行的ActionBarActivity内* /
    startSupportActionMode(modeCallBack);
    的setContentView(R.layout.grid_main);    //你的code其余来到这里
}

I am following a tutorial 11. Exercise: Using the contextual action mode

But I am having this error :

mActionMode = Display.this.startActionMode(mActionModeCallback);
                view.setSelected(true);

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

I checked this stackoverflow answer they said to add

 ActionBarActivity activity=(ActionBarActivity)getActivity();
activity.startSupportActionMode(modeCallBack);

I had this error

The method getActivity() is undefined for the type Display

what I am doing wrong ? the below is my code.

package com.example.sqlfirst;


import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.Tab;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.view.ActionMode;
import android.view.ActionMode.Callback;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;


public class Display extends ActionBarActivity {
    private final static String TAG = "MainActivity";
    protected Object mActionMode;
    @Override 
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid_main);
         //have to use getSupportActionBar from android.support.v7.app
       // ActionBar actionBar = getSupportActionBar();
        //getActionBar().setDisplayHomeAsUpEnabled(true);

        ActionBarActivity activity=(ActionBarActivity)getActivity();
        activity.startSupportActionMode(modeCallBack);

          View view = findViewById(R.id.gridview);
            view.setOnLongClickListener(new View.OnLongClickListener() {
              // called when the user long-clicks on someView
              public boolean onLongClick(View view) {
                if (mActionMode != null) {
                  return false;
                }

                // start the CAB using the ActionMode.Callback defined above
                mActionMode = Display.this.startActionMode(mActionModeCallback);
                view.setSelected(true);
                return true;
              }
            });






        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new OnItemClickListener() {

   public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            // Send intent to SingleViewActivity
       Intent i = new Intent(getApplicationContext(), SingleViewActivity.class);
       // Pass image index
       i.putExtra("id", position);
       startActivity(i);
       } });

        }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
         MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.activity_main_actions, menu);
        return super.onCreateOptionsMenu(menu);
    }

       public boolean onOptionsItemSelected(MenuItem item) 
       { 
          super.onOptionsItemSelected(item); 

     switch (item.getItemId()){

     case R.id.ic_action_person:
         Toast.makeText(this, "Create a new account please", Toast.LENGTH_SHORT).show();
           Intent intent = new Intent(this, Register.class);
             startActivity(intent);
         return true;

     case R.id.ic_action_search:

         Toast.makeText(this, "Search for new images", Toast.LENGTH_SHORT).show();
         Intent  isearch= new Intent(this,Search.class);
            startActivity(isearch);
     return true;

     case R.id.ic_action_picture:
         Toast.makeText(this, "Search for new photos", Toast.LENGTH_SHORT).show();
         Intent  iphotos= new Intent(this,Display.class);
         startActivity(iphotos);
         return true;


     }
        return true;
       } 



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

         // Called when the action mode is created; startActionMode() was called
         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
           // inflate a menu resource providing context menu items
           MenuInflater inflater = mode.getMenuInflater();
           // assumes that you have "contexual.xml" menu resources
           inflater.inflate(R.menu.activity_main_actions, menu);
           return true;
         }

         // called each time the action mode is shown. Always called after
         // onCreateActionMode, but
         // may be called multiple times if the mode is invalidated.
         public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
           return false; // Return false if nothing is done
         }

         // called when the user selects a contextual menu item
         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
           switch (item.getItemId()) {
           case R.id.ic_action_picture:
             Toast.makeText(Display.this, "Selected menu",
                 Toast.LENGTH_LONG).show();
             mode.finish(); // Action picked, so close the CAB
             return true;
           default:
             return false;
           }
         }

         // called when the user exits the action mode
         public void onDestroyActionMode(ActionMode mode) {
           mActionMode = null;
         }
       };

}

解决方案

Your Display class is extending ActionBarActivity, that means that it´s an Activity so there´s no need to use getActivity(), you can directly make use of the methods like this:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /* this method is available within your ActionBarActivity*/
    startSupportActionMode(modeCallBack); 
    setContentView(R.layout.grid_main);

    // The rest of your code comes here
}

这篇关于错误为什么工作上下文动作模式启动ActionModeis不适用的参数(ActionMode的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆