các thực hành tốt nhất là gì để gọi: -Butterknife xem tùy chỉnh unbind
Butterknife.unbind()
trong một giao diện tùy chỉnh Android xin vui lòng?
các thực hành tốt nhất là gì để gọi: -Butterknife xem tùy chỉnh unbind
Butterknife.unbind()
trong một giao diện tùy chỉnh Android xin vui lòng?
Cố gắng trong onDetachedFromWindow()
Unbinder unbinder;
unbinder = Butterknife.bind(this, root);
và trong onDetachedFromWindow
bạn cần phải gọi unbinder.unbind();
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// View is now detached, and about to be destroyed
unbinder.unbind()
}
Vâng, onDetachedFromWindow
là chức năng đúng như đã đề cập trong NJ's answer vì đây là nơi mà xem không còn có một bề mặt dùng để vẽ.
Nhưng mức sử dụng được đề cập không chính xác trong câu trả lời. Cách tiếp cận đúng liên quan đến việc ràng buộc trong onFinishInflate()
:
@Override
protected void onFinishInflate() {
super.onFinishInflate();
unbinder = ButterKnife.bind(this);
}
và unbinding trong onDetachedFromWindow
:
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
// View is now detached, and about to be destroyed
unbinder.unbind();
}
Đã sửa câu trả lời của tôi :) cảm ơn vì đã trỏ –
là cần thiết để ràng buộc khi ở chế độ xem tùy chỉnh? tôi không unbind trong một mảnh tại sao tôi cần phải làm điều này trong xem? im chỉ cần tự hỏi nếu nó cần thiết để làm sạch hoặc tại sao bận tâm unbinding? – j2emanue
@ j2emanue Nếu bạn cần vô hiệu hóa các lượt xem và bỏ qua trình lắng nghe thì bạn nên gọi unbind trong chế độ xem tùy chỉnh. Nó không cần thiết nhưng là một cách tiếp cận được đề nghị. Bạn cũng nên bỏ liên kết trong Phân đoạn. Jake Wharton đã đề cập đến lý do tại đây: ' Có thể có trường hợp khi khung nhìn của mảnh bị phá hủy, nhưng thể hiện phân đoạn vẫn còn hiện diện. Ví dụ, khi đoạn đi vào ngăn xếp lại - onDestroyView() được gọi, nhưng onDestroy() không phải là.' nguồn: https://github.com/JakeWharton/butterknife/issues/291 –
Cảnh báo!
Nếu bạn đặt thuộc tính với app:attribute="value"
trong XML, bạn sẽ mất giá trị của họ khi đọc với:
@Override
protected void onFinishInflate() {
super.onFinishInflate();
unbinder = ButterKnife.bind(this);
TypedValue typedValue = new TypedValue();
TypedArray typedArray = getContext().obtainStyledAttributes(typedValue.data, R.styleable.YourStyleable);
try {
int number = typedArray.getResourceId(R.styleable.YourStyleable_number, 0);
image.setImageResource(number);
String text = typedArray.getString(R.styleable.YourStyleable_text);
text.setText(text);
} finally {
typedArray.recycle();
}
}
giá trị của họ sẽ là 0 và null. Khởi tạo chúng trong hàm tạo của khung nhìn tùy chỉnh.
Lý do là sử dụng obtainStyledAttributes(typedValue.data
thay vì obtainStyledAttributes(attrs
.
Đó là cách tiếp cận đúng, mặc dù hãy cẩn thận với điều đó, vì lệnh gọi 'onDetachedFromWindow' không nhất thiết phải có nghĩa là' Chế độ xem' sắp bị hủy (ví dụ: nếu đó là một phần của 'RecyclerView'). –
@BartekLipinski Cách tiếp cận đúng cho chế độ xem tùy chỉnh trong ViewHolder là gì. Không thể gọi unbind trong onDetachedFromWindow(). – erdna