2013-12-19 46 views
1

我已設置setOnCreateContextMenuListener來編輯文本。 onCreateContextMenu方法被稱爲用戶長按edittext。並打開上下文菜單'完成'和'複製'選項。EditText setOnCreateContextMenuListener處理結果

但我的問題是我如何處理,當用戶選擇完成選項或複製選項?

當用戶點擊完成按鈕或複製按鈕時,我可以得到任何事件嗎?所以我可以通過剪輯管理器獲取選定的文本?

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. 

     } 
    }); 

謝謝。

回答

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; 
    } 

希望它會幫助你。

+0

謝謝4重播,我有這樣的打印日誌。 --- @ Override \t public boolean onContextItemSelected(MenuItem item){ \t \t Log.i(「TAG」,「onContextItemSelected」); ---但它不打印。這意味着方法沒有調用。 – nil

+0

但你沒有采取按鈕事件仔細查看我的答案兄弟。 @nil – Andrain

+0

可以請你發佈你的代碼嗎? – Andrain

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; 
      } 
     }); 

    }  
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; 
    } 
}