Android 错误:为什么工作上下文操作模式start ActionMode不适用于参数(ActionMode
我正在学习一个教程 但我有一个错误:Android 错误:为什么工作上下文操作模式start ActionMode不适用于参数(ActionMode,android,Android,我正在学习一个教程 但我有一个错误: mActionMode = Display.this.startActionMode(mActionModeCallback); view.setSelected(true); Error: The method startActionMode(ActionMode.Callback) in the type Activity is not applicable for the arguments (ActionMod
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)
我查过了
他们说要加上
ActionBarActivity activity=(ActionBarActivity)getActivity();
activity.startSupportActionMode(modeCallBack);
我犯了这个错误
The method getActivity() is undefined for the type Display
我做错了什么?下面是我的代码
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;
}
};
}
package 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{
私有最终静态字符串TAG=“MainActivity”;
保护对象模式;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.grid_main);
//必须从android.support.v7.app使用getSupportActionBar
//ActionBar ActionBar=getSupportActionBar();
//getActionBar().setDisplayHomeAsUpEnabled(true);
ActionBarActivity活动=(ActionBarActivity)getActivity();
activity.startSupportActionMode(modeCallBack);
视图=findViewById(R.id.gridview);
view.setOnLongClickListener(新视图.OnLongClickListener(){
//当用户长时间单击someView时调用
仅长按公共布尔值(视图){
if(mActionMode!=null){
返回false;
}
//使用上面定义的ActionMode.Callback启动CAB
mActionMode=Display.this.startActionMode(mActionModeCallback);
view.setSelected(true);
返回true;
}
});
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
//将意图发送到SingleViewActivity
Intent i=新的Intent(getApplicationContext(),SingleViewActivity.class);
//通过图像索引
i、 putExtra(“id”,位置);
星触觉(i);
} });
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。活动\主操作,菜单);
返回super.onCreateOptions菜单(菜单);
}
公共布尔值onOptionsItemSelected(菜单项项)
{
super.onOptionsItemSelected(项目);
开关(item.getItemId()){
案例R.id.ic\U行动\U人员:
Toast.makeText(这是“请创建一个新帐户”,Toast.LENGTH_SHORT.show();
意向意向=新意向(此为Register.class);
星触觉(意向);
返回true;
案例R.id.ic\U行动\U搜索:
Toast.makeText(这是“搜索新图像”,Toast.LENGTH_SHORT.show();
Intent isearch=newintent(这个,Search.class);
星触觉(isearch);
返回true;
案例R.id.ic\行动\图片:
Toast.makeText(这是“搜索新照片”,Toast.LENGTH_SHORT.show();
Intent iphotos=新的Intent(这个,Display.class);
星触觉(iphotos);
返回true;
}
返回true;
}
private ActionMode.Callback mActionModeCallback=new ActionMode.Callback(){
//创建操作模式时调用;调用startActionMode()
公共布尔onCreateActionMode(ActionMode模式,菜单){
//为提供上下文菜单项的菜单资源充气
MenuInflater充气器=模式。getMenuInflater();
//假设您有“contexual.xml”菜单资源
充气机。充气(右菜单。活动\主操作,菜单);
返回true;
}
//每次显示动作模式时调用。始终在之后调用
//onCreateActionMode,但是
//如果模式无效,可能会调用多次。
公共布尔onPrepareActionMode(操作模式,菜单){
return false;//如果不执行任何操作,则返回false
}
//当用户选择上下文菜单项时调用
公共布尔值onActionItemClicked(ActionMode模式,菜单项){
开关(item.getItemId()){
案例R.id.ic\行动\图片:
Toast.makeText(Display.this,“选定菜单”,
Toast.LENGTH_LONG).show();
mode.finish();//已拾取操作,因此关闭驾驶室
返回true;
违约:
返回false;
}
}
//当用户退出操作模式时调用
公共void onDestroyActionMode(ActionMode模式){
mActionMode=null;
}
};
}
您的显示类正在扩展ActionBarActivity,这意味着它是一个活动,因此无需使用getActivity()
,您可以直接使用以下方法:
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
}