EditText setOnCreateContextMenuListener处理结果

时间:2013-12-19 12:27:19

标签: android

我已将setOnCreateContextMenuListener设置为edittext。 onCreateContextMenu方法称为用户长按edittext。然后打开上下文菜单,其中包含“已完成”和“复制”选项。

但我的问题是,当用户选择完成选项或复制选项时,我该如何处理?

当用户点击完成按钮或复制按钮时,我可以获得任何事件。所以我可以通过剪辑管理器获取所选文本吗?

edit.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {

        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            Log.i("TAG", "onCreateContextMenu");//it is printing while context menu is created.

        }
    });

感谢。

3 个答案:

答案 0 :(得分:2)

onContextItemSelected是您应该使用的事件。但它没有View参数来访问所选项目。以下是访问所选View的技巧。

public class MainActivity extends Activity 
{
    protected View selectedView;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                ListView lv = (ListView)findViewById(R.id.lv1);
                registerForContextMenu(lv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        this.selectedView = v;
        super.onCreateContextMenu(menu, v, menuInfo);            
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        switch(item.getId())
        {
            case R.id.Context_Edit:
                // access to view with this.selectedView
                break;

            case R.id.Context_Delete:
                // access to view with this.selectedView
                break;
            default:
                return super.onContextItemSelected(item);
        }
        return true;
    }
}

答案 1 :(得分:0)

您可以获得两个按钮事件,例如以下示例

 public class MainActivity extends Activity 
 {
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                ListView lv = (ListView)findViewById(R.id.lv1);
                registerForContextMenu(lv);
        }
 }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        super.onCreateContextMenu(menu, v, menuInfo);

        if (v.getId() == R.id.lv1) 
        {
            menu.setHeaderTitle("Select Action");
            menu.add(0, v.getId(), 0, "Edit");
            menu.add(0, v.getId(), 0, "Delete");
        }
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        if(item.getTitle() == "Edit")
        {
            // do something
        }
        if(item.getTitle() == "Delete")
        {
            // do something
        }
        return true;
    }

希望它会对你有所帮助。

答案 2 :(得分:0)

您必须覆盖editText的onLongClick并设置一个CAB。这是一个例子:

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

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // TODO Auto-generated method stub

        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // TODO Auto-generated method stub
            return true;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            if (item.getItemId() == android.R.id.copy){
                ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
                Log.i("CAB",String.valueOf(clipboard.getPrimaryClip().getItemAt(0).getText()));
            }
            return true;
        }
    };
    private EditText edtText;



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


        edtText = (EditText) findViewById(R.id.edtText1);

        registerForContextMenu(edtText);
        edtText.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                ((EditText)v).setTextIsSelectable(true);                
                ((EditText)v).setCustomSelectionActionModeCallback(action);
                return false;
            }
        });  

    }