2012-06-02 1 views
7

Ho appena iniziato usando ActionBarSherlock per la costruzione di un po 'di semplice applicazione, nella mia prima schermata ho elenco semplice e ho aggiunto nuova voce di menu per aggiungere nuovo elemento alla lista:Costruire ActionMode con layout personalizzato in ActionBarSherlock

MenuItem newItem = menu.add("New"); 
newItem.setIcon(R.drawable.ic_compose_inverse) 
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

ora quando l'utente sceglie di aggiungere un nuovo elemento che voglio iniziare una nuova modalità di azione per l'aggiunta di nuovo elemento, questa modalità di azione deve contenere un layout semplice con casella di testo e un pulsante, così ho creato questo layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

     <EditText 
      android:id="@+id/text" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:inputType="text" > 
     </EditText> 
     <Button 
      android:id="@+id/addBtn" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/add" /> 
</LinearLayout> 

quindi ora ho solo bisogno di se t questo layout alla barra nella nuova modalità di azione:

newItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       actionMode = startActionMode(new MyAction(ListEditor.this)); 
       return true; 
      } 
     }); 

e nella mia azione:

private final class MyAction implements ActionMode.Callback { 
    ... 
    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     View customNav = LayoutInflater.from(context).inflate(R.layout.add_item, null); 
     getSupportActionBar().setCustomView(customNav); 
     getSupportActionBar().setDisplayShowCustomEnabled(true); 
     return true; 
    } 
} 

Quindi, in pratica ho bisogno di qualcosa tra ActionModes e CustomNavigation dell'esempio sherlock, ma il problema è che imposta il layout sulla barra principale e non sulla nuova barra che si apre per l'azione.

qualche suggerimento?

risposta

9

Probabilmente si desidera utilizzare il metodo nella classe ActionMode denominata "setCustomView".

quindi qualcosa di simile:

newItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      actionMode = startActionMode(new MyAction(ListEditor.this)); 
      actionMode.setCustomView(customNav); 
      return true; 
     } 
    });