Создание ActionMode с пользовательским макетом в ActionBarSherlock

Я только начинаю использовать ActionBarSherlock для создания простого приложения, на первом экране у меня есть простой список, и я добавил новый пункт меню для добавления нового элемента в список:

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

теперь, когда пользователь выбирает добавить новый элемент, я хочу запустить новый режим действий для добавления нового элемента, этот режим действий должен содержать простой макет с текстовым полем и кнопкой, поэтому я создал этот макет:

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

так что теперь мне просто нужно установить этот макет на панель в новом режиме действий:

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

и в моем действии:

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

Итак, в основном мне нужно что-то среднее между ActionModes и CustomNavigation из примера с Шерлоком, но проблема в том, что он устанавливает макет для основной панели, а не для новой панели, которая открывается для действия.

какие-либо предложения?


person shem    schedule 02.06.2012    source источник


Ответы (1)


Вы, вероятно, захотите использовать метод в классе ActionMode под названием «setCustomView».

так что-то вроде этого:

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