我在startActionMode()方法中遇到错误

时间:2017-06-29 16:28:06

标签: java android

我在startActionMode()方法中遇到错误。使用Cast parameter to android.view.ActionMode.Callback表达式表示我必须进行转换事务,但这不是解决方案。我不知道这个问题。

您可以查看代码:

package com.egemenzeytinci.contextmenuactionmode;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.view.ActionMode;
import android.support.v7.view.menu.ActionMenuItemView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private android.view.ActionMode actionMode;

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

    TextView text= (TextView) findViewById(R.id.text);

    text.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            if(actionMode!=null) {
                return false;
            }

            MyActionModeCallBack callBack=new MyActionModeCallBack();
            actionMode=startActionMode(callBack); //problem is here!!!
            v.setSelected(true);

            return true;
        }
    });
}

class MyActionModeCallBack implements ActionMode.Callback {

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        mode.getMenuInflater().inflate(R.menu.context_menu,menu);
        return true;
    }

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

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        return false;
    }

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

3 个答案:

答案 0 :(得分:1)

您不需要动作模式的参考来实现它。因此,不要以这种方式调用方法actionMode=startActionMode(callBack);,而是以这种方式调用startActionMode(callBack);这样做。

答案 1 :(得分:0)

class MyActionModeCallBack实现android.view.ActionMode.Callback {

  @Override
  public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
      return false;
  }

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

  @Override
  public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
      return false;
  }

  @Override
  public void onDestroyActionMode(android.view.ActionMode mode) {

  }

}}

答案 2 :(得分:0)

应该是这样的:

private ActionMode actionMode;

不是这个:

private android.view.ActionMode actionMode;

应该是这样的:

actionMode=startSupportActionMode(callBack);

不是这个:

actionMode=startActionMode(callBack);