Подтвердить что ты не робот

Отображение раскрывающегося списка панели действий Android на элемент click

Я пишу приложение для Android для планшетов. Я пошел с панелью действий, чтобы создать свои значки. Тем не менее, мне нужно открыть пользовательский вид, когда щелкнут один из пунктов меню.

Я не хочу настраивать панель действий - мне нужно раздуть пользовательский вид, когда нажимается элемент панели "Обзор объектов". Это представление должно появиться как выпадающее меню, но использовать мой собственный собственный макет, поскольку он не будет использоваться для навигации.

Drop down menu

Вот мой menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_browse"
        android:title="Browse Subjects"
        android:showAsAction="always"
        android:actionLayout="@layout/action_layout_browse"
        android:actionProviderClass="au.com.pearson.f12catalogue.action_providers.BrowseProvider"
            />
    <item android:id="@+id/menu_settings"
        android:title="Settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
</menu>

Я предположил, что ActionProviderClass позволит мне создать экземпляр пользовательского представления при щелчке элемента панели действий, но я не могу найти способ - возможно, я схожу с неправильного пути.

Любая помощь по этому поводу будет MUCH оценена! Спасибо!

UPDATE: Спасибо за ссылки на стиль панели действий, но я не хочу просто создавать раскрывающийся список. Я хочу раздуть пользовательский вид. В представлении также будут выполняться запросы БД и т.д.

4b9b3361

Ответ 1

Хорошо, я сам разработал решение. В основном actionProviderClass используется для создания экземпляра actionView в actionBar. В этом классе вы можете прикрепить слушателя onClick к виду, которое вы надуваете. Я использовал этот прослушиватель для раздувания раскрывающегося списка в главном кадре при нажатии.

Например

public class BaseProvider extends ActionProvider {

    protected final Context context;
    protected final int layout;
    protected final BaseProvider self;
    protected View view;
    protected int positionLeft = 0;
    protected Dropdown dropdown;

    public BaseProvider(Context context, int layout, Dropdown dropdown) {
        super(context);
        this.layout = layout;
        this.context = context;
        this.self = this;
        this.dropdown = dropdown;
    }

    @Override
    public View onCreateActionView() {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

        View view = inflater.inflate(this.layout, null);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                self.onItemClick();
            }
        });
        this.view = view;
        return view;
    }

    public boolean onItemClick(){
        toggleDropdown();
        return true;
    }

    protected void toggleDropdown(){
        this.positionLeft = getRelativeLeft(view);
        DropdownInflater.getInstance().toggleDropdown(this.dropdown,this.positionLeft);
    }

    protected int getRelativeLeft(View view) {
        int[] loc = new int[2];
        view.getLocationOnScreen(loc);
        return loc[0];
    }
}