2014-07-16 36 views
0

如何使用AndroidAnnotations的自定義操作欄佈局?如何使用AndroidAnnotations的自定義操作欄佈局?

,工程代碼:

@EActivity(R.layout.activity_register_classes) 
public class RegisterClassesActivity extends ActionBarActivity { 

    @AfterViews 
    void setupActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayShowCustomEnabled(true); 
     actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar); 

     findViewById(R.id.id_cancel).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getBaseContext(), "Cancelando...", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

但下面的代碼片段不會:

@EActivity(R.layout.activity_register_classes) 
public class RegisterClassesActivity extends ActionBarActivity { 

    @AfterViews 
    void setupActionBar() { 
     ActionBar actionBar = getSupportActionBar(); 
     actionBar.setDisplayShowCustomEnabled(true); 
     actionBar.setDisplayShowHomeEnabled(false); 
     actionBar.setDisplayShowTitleEnabled(false); 
     actionBar.setCustomView(R.layout.fragment_save_cancel_action_bar); 
    } 

    @Click(R.id.id_save) 
    void cancel() { 
     Toast.makeText(getBaseContext(), "Cancel...", Toast.LENGTH_SHORT).show(); 
    } 
} 

我使用該庫的3.0.1版本。 Android API 19

+0

你可以發佈一個示例項目來重現該問題嗎? – WonderCsabo

+0

我無法發佈該項目,因爲它是內部產品。但是上面的代碼足以重現錯誤。 – Claudemiro

+0

我要求你發佈一個* sample *項目。我可以從代碼創建它,但它需要額外的東西,代碼本身是不夠的... – WonderCsabo

回答

1

我看到這個問題有一段時間了,我希望現在能夠有所幫助。所以我在這個問題中也引起了Android Annotations文檔的很差。其實我必須解決這兩次因爲我的第一個解決方案沒有與第一個水龍頭的工作,我會解釋這在代碼。

1.-第一個是創建一個菜單,你必須在res/menu中做到這一點,讓它命名爲「myactivity_menu.xml」,它應該看起來像這樣(它應該是默認情況下創建的創建活動):

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MyActivity"> 
    <item android:id="@+id/thisIsAnId" 
     android:icon="@drawable/your_drawable" 
     android:title="@string/your_string" 
     app:showAsAction="always"/> /> 
</menu> 

此代碼中重要的是給它一個id(你會需要它),如果你想擁有一個漂亮的圖標,上傳圖標添加到您繪製的文件夾中任何其他資產(不知道,但我認爲字符串是可選的)。

2:現在去你的活動,並使用AndroidAnnotations這種方式調用菜單:

@EActivity(R.layout.my_activity) 
@OptionsMenu(R.menu.myactivity_menu) 

就是這麼簡單隻需添加@OptionsMenu的@EActivity之下,多數民衆贊成它,您的菜單現在應該是可見的。

不管怎麼說,這裏有一個很好的觀點,那麼我該如何處理菜單中的按鈕或圖標呢?是一個非常好的問題導致AndroidAnnotations doc對此並不清楚,這些例子非常差,可能會導致您混淆。因此,這是我們必須做的:

3.-在這裏,我們要設置取景器爲我們的菜單項:

@OptionsItem(R.id.thisIsAnId) 
    void whatEverToDoWithMyMenuItem() { 
    } 

這需要有以下無效的方法,我認爲這是在AndroidAnnotations文檔中只有適當的說明。

此代碼可以放在@AfterViews下。

但是,這stil並不清楚,導致AndroidAnnotation更改Android邏輯派生自onItem ...那麼如果我必須設置一個偵聽器會發生什麼?

我在這裏犯的錯誤是在我們剛創建的void方法內部使用正常的Android邏輯。這將無法正常工作。

4.-那麼什麼是如此難以在這一點上,我們必須簡單地添加任何我們想做的事,因爲我們媒體鏈接有聽衆:

@OptionsItem(R.id.thisIsAnId) 
    void whatEverToDoWithMyMenuItem() { 
     Toast toast = Toast.makeText(getApplicationContext(), "Sample Text",  
     Toast.LENGTH_LONG); 
     toast.show(); 
    } 

這裏的竅門是點擊收聽當我們做了@OptionsItem(R.id.thisIsAnId)的時候已經準備好了,所以我們可以在下面的void方法中做任何我們想做的事情。

如果由於某種原因,你使用voide方法內的警報,並得到一個錯誤,請參閱此問題,我得到了固定用this

Link 1

Link 2

如果從AndroidAnnotations人是閱讀此內容,請改善您的文檔。

+0

我是一名AndroidAnnotations開發人員。我們的文檔缺少什麼? – WonderCsabo

+0

謝謝關心,我受了很多痛苦。我認爲最友好的結構是WordPress Codex的使用。首先,定義什麼是代碼。之後,有幾個例子。最後,你可能正在尋找這個部分。我會強調這些例子。如果沒有進一步瞭解如何使用@OptionItem的問題是沒有解釋這是已經是一個監聽器。在其他情況下,如使用服務的情況從未詳細解釋過。你必須製作出可靠的文檔。從字面上寫「這應該放在X文件中,如果沒有創建,現在創建它,將它放在Y」 – cutiko

+0

感謝您的反饋!我認爲維基在菜單主題上很清楚:「'@ OptionsItem'標記接收菜單選擇事件的方法」。請注意AA適用於已熟悉Android API的開發人員。所以'@ OptionsItem'使用一個監聽器是微不足道的。但你可以隨時查看生成的代碼,這在AA中是非常棒的 - 沒有魔法。忍受我的維基是由AA開發者編寫的,而不是普通用戶,所以我們可能會跳過一些對我們來說微不足道的信息。如果您有任何建議,請不要猶豫,在聊天室或郵件列表中分享。 – WonderCsabo

相關問題