Eine meiner üblichen Praxis in Android Aktivität/Fragment ist benutzerdefinierte Ansicht Halter statische Klasse in jedem Fragment/Aktivität erstellen, die nur Ansichten Referenzen enthält. Ich binde Fragment/Aktivität Blick auf diese benutzerdefinierte Ansicht Halter als Ziel mit ButterKnife. In diesem Fall funktioniert ButterKnife @OnClick
Annotation nicht, da View-Referenzen in View-Holder-Klasse sind. Bitte schauen Sie sich meinen Code an.ButterKnife @OnClick für Ansichten in benutzerdefinierte Ansicht Halter Klasse
Gibt es eine Möglichkeit, dies zu überwinden, ohne meine Sichthalterklasse zu zerstören?
public class BookDetailFragment extends Fragment {
private ViewHolder mViewHolder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mFragmentView = inflater.inflate(R.layout.book_detail_view, container, false);
// Binding view holder
mViewHolder = new ViewHolder(mFragmentView);
return mFragmentView;
}
@OnClick (R.id.book_title)
public void onBookTitleClicked(TextView v) {
// This won't work. Is it possible to make it work with view holder class ?
// If I move this method into ViewHolder class I can't access fragment variables.
}
@Override
public void onDestroyView() {
super.onDestroyView();
mViewHolder.unbind();
}
static class ViewHolder {
@BindView(R.id.book_title) TextView bookTitle;
@BindView(R.id.book_authors) TextView bookAuthors;
private Unbinder mButterKnifeUnbinder;
public ViewHolder(View view) {
mButterKnifeUnbinder = ButterKnife.bind(this, view);
}
public void unbind() {
mButterKnifeUnbinder.unbind();
}
}
}
versuchen Sie, diese Methode in Ihre 'ViewHolder' Klasse zu verschieben. –
So können Sie einfach auf die Fragmentvariable zugreifen. Ja. Dies ist möglich, indem ein Verweis auf die ViewHolder-Klasse übergeben wird, aber nach einer einfacheren Lösung gesucht wird. –