2012-08-23 62 views
1

從操作欄中使用的菜單項獲取操作視圖時遇到問題。 出於兼容性原因,我使用Actionbarsherlock。在Android上訪問ActionView ActionBar

我使用這個代碼在onCreateOptionMenu:

 menu.add("Search") 
     .setIcon(R.drawable.ic_search) 
     .setActionView(R.layout.collapsible_edittext) 
     .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 

我設置的是的ActionView剛剛從XML一個EditText這在寬度方面將「FILL_PARENT」。 因爲我找不到一種方法來訪問這個edittext來註冊一個事件處理程序,我試圖在oncreateoptionsmenu(後來在onOptionsItemSelected中)中添加「R.layout.collapsible_edittext」,並將結果添加爲acitonview。 當我這樣做後,我可以訪問edittext,但它沒有采取我的操作欄中的全寬了圖標被點擊後。

任何提示如何正確訪問ActionView?

回答

2

的EditText佈局

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:hint="Search"/> 

代碼

private EditText search; 


    private TextWatcher filterTextWatcher = new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     } 

     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      //... your logic here  
     } 
    }; 

@Override 
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 
     menu.add(0, 3, 3, R.string.ac_search ).setIcon(R.drawable.ic_action_search).setActionView(R.layout.action_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); 
     return super.onCreateOptionsMenu(menu); 
    } 


    @Override 
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) { 
     switch (item.getItemId()){ 

      case 3: 
       search = (EditText) item.getActionView(); 
       search.addTextChangedListener(filterTextWatcher); 
       break; 

     } 
     return true; 
    } 
+0

感謝這部作品:) 應該已經這樣嘗試過太 – Niksac