2014-02-17 29 views
13

陣列目前,我有這個陣列的觀點:使用Butterknife注入的意見

ImageView activityImageViews[] = { 
    (ImageView) rootView.findViewById(R.id.img_activity_1), 
    (ImageView) rootView.findViewById(R.id.img_activity_2), 
    (ImageView) rootView.findViewById(R.id.img_activity_3), 
    (ImageView) rootView.findViewById(R.id.img_activity_4) 
}; 

有沒有一種方法,我可以用Butterknife注入所有這些觀點?我需要將它們保存在一個數組中(或以某種方式讓我可以迭代它們)。

+0

剛剛偶然Butterknife所以不知道它是否支持直接,但爲什麼不直接注入他們的個人和收集他們在一個數組或內部的onCreate列表? – cYrixmorten

回答

39

當前有可能將數個視圖注入爲數組。從ButterKnife documentation(見視圖列出部分)

@InjectViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) 
List<EditText> nameViews; 

同樣的事情多次點擊聽衆:

@OnClick({ R.id.door1, R.id.door2, R.id.door3 }) 
public void pickDoor(DoorView door) { 
    if (door.hasPrizeBehind()) { 
    Toast.makeText(this, "You win!", LENGTH_SHORT).show(); 
    } else { 
    Toast.makeText(this, "Try again", LENGTH_SHORT).show(); 
    } 
} 

UPDATE 2017年9月19日: 由於Butterknife版本Version 7.0.0 (2015-06-27)@Bind更換@InjectView@InjectViews。 但是因爲對於一個視圖和多個視圖,版本Version 8.0.0 (2016-04-25)@Bind分別被替換爲@BindView@BindViews。 所以對於知道正確的語法是:

@BindView(R.id.button1) Button button1; 
@BindView(R.id.button2) Button button2; 

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) 
List<EditText> nameViews; 
+1

酷!儘管我現在不在這個項目上工作,但很高興知道以供將來參考,所以謝謝:) – aluxian

2

我想,加入到數組中的元素都是動態的,否則,你可以簡單地通過一個聲明它們在你的頭一個,之後將它們添加到陣列:

// in the header: 
@InjectView(R.id.imageview1) ImageView imageView1; 
@InjectView(R.id.imageview2) ImageView imageView2; 
@InjectView(R.id.imageview3) ImageView imageView3; 

// inside your code: 
ImageView activityImageViews[] = { 
    imageView1, imageView2, imageView3 
}; 

但是但是,如果這些元素動態的(元素的數量/元素的數量等),你唯一可以做的就是使用ButterKnife.findById,這將省掉ImageView轉換 - 你不能通過註釋注入它們,因爲Butterknife不知道在編譯時產生/注入什麼時間(信息首次在運行時可用)。

ImageView activityImageViews[] = { 
    ButterKnife.findById(view, R.id.img_activity_1), 
    ButterKnife.findById(view, R.id.img_activity_2), 
    ButterKnife.findById(view, R.id.img_activity_3), 
    ButterKnife.findById(view, R.id.img_activity_4) 
}; 
+0

第二個片段給出_Incompatible類型。必需:android.widget.ImageView,找到:android.view.View_。我會用你的第一種方法,謝謝! – aluxian

+0

嗯,這很奇怪。我使用ButterKnife 4.0.1,第二種方法對我也很好。該文件說'[...]它使用泛型來推斷返回類型,並自動執行演員表。' – Flixer