recyclerview - android timeline



項目點擊Android動作欄自定義下拉視圖 (1)

我正在為平板電腦編寫Android應用 我已經與行動欄去創建我的圖標。 但是,我需要打開一個自定義視圖,當其中一個菜單項被點擊。

我不想要一個自定義的操作欄 - 當點擊“瀏覽主題”操作欄項時,我需要給自定義視圖添加一個空白。 這個視圖將需要顯示為一個下拉菜單,但使用我自己的自定義佈局,因為它不會用於導航。

這是我的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會允許我實例化一個自定義視圖,當我點擊操作欄項目,但我不能找出一個辦法 - 也許我會走錯路。

任何幫助,將非常感激! 謝謝!

更新:感謝鏈接到行動欄的樣式,但我不想簡單的下拉式樣。 我想膨脹一個自定義的視圖。 該視圖將執行數據庫查詢等。


Answer #1

好吧,我自己制定了一個解決方案。 基本上actionProviderClass被用來在actionBar中實例化一個actionView。 在這個類中你可以附加一個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];
    }
}




android-3.0-honeycomb