## (一).前言:
前面我們已經對于AndroidAnnotations框架集成OrmLite做了講解,今天我們開始具體學習一下使用DI框架在Adapters和lists中的使用方法。
FastDev4Android框架項目地址:[https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android)?
## (二).Apdaters和lists介紹使用:
這邊只是展示一下使用AndroidAnnotations來進行簡單處理Adapter和AdapterView。下面是使用實例:
首先先由一個Person實體類:
~~~
public class Person{
public final String firstName;
public final String lastName;
public Person(String firstName, StringlastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
~~~
然后有一個PersoFinder接口:
~~~
public interfacePersonFinder {
List<Person> findAll();
}
~~~
我們現在需要創建一個PersonListActivity來列出所有的人。為了達到這一目的,我們需要一個PersonListAdater適配器來進行綁定數據到view中。并且同時需要PersonItemView,該用來表示列表中每一項item。我們這邊使用的PersonItemView將會有兩個Textview,實例如下:
~~~
@EViewGroup(R.layout.person_item)
public class PersonItemView extends LinearLayout {
@ViewById
TextView firstNameView;
@ViewById
TextView lastNameView;
public PersonItemView(Context context) {
super(context);
}
public void bind(Person person) {
firstNameView.setText(person.firstName);
lastNameView.setText(person.lastName);
}
}
~~~
現在有一個InMemoryPersonFinder實現了PersonFinder接口,該通過@EBean進行注解。適配器直接操作數據并且創建視圖來顯示這些數據;
~~~
@EBean
public class PersonListAdapter extends BaseAdapter {
List<Person> persons;
@Bean(InMemoryPersonFinder.class)
PersonFinder personFinder;
@RootContext
Context context;
@AfterInject
void initAdapter() {
persons = personFinder.findAll();
}
@Override
public View getView(int position, ViewconvertView, ViewGroup parent) {
PersonItemView personItemView;
if (convertView == null) {
personItemView =PersonItemView_.build(context);
} else {
personItemView = (PersonItemView)convertView;
}
personItemView.bind(getItem(position));
return personItemView;
}
@Override
public int getCount() {
return persons.size();
}
@Override
public Person getItem(int position) {
return persons.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
~~~
PersonListActivity綁定PersonListAdapter到ListView中,但PersonItemView被點擊的時候,顯示一個toast。
~~~
@EActivity(R.layout.person_list)
public class PersonListActivity extends Activity {
@ViewById
ListView personList;
@Bean
PersonListAdapter adapter;
@AfterViews
void bindAdapter() {
personList.setAdapter(adapter);
}
@ItemClick
void personListItemClicked(Person person) {
makeText(this, person.firstName +" " + person.lastName, LENGTH_SHORT).show();
}
}
~~~
## (三).RecyclerView和ViewHolder使用:
如果你使用的是RecyclerView而不是簡單的ListView,那么就要特殊處理了。RecyclerView.Apdater創建ViewHolder而不是view。所以你這邊就不能簡單注入ViewHolder類了,但是你可以使用@EViewGroup來進行注解。
現在創建一個泛型類來把所有類型的View包裝成ViewHondler
~~~
public class ViewWrapper<V extends View> extends RecyclerView.ViewHolder {
private V view;
public ViewWrapper(V itemView) {
super(itemView);
view = itemView;
}
public V getView() {
return view;
}
}
~~~
為所有的RecyclerView適配器創建一個基類
~~~
public abstract class RecyclerViewAdapterBase<T, V extends View> extends RecyclerView.Adapter<ViewWrapper<V>> {
protected List<T> items = newArrayList<T>();
@Override
public int getItemCount() {
return items.size();
}
@Override
public final ViewWrapper<V>onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewWrapper<V>(onCreateItemView(parent, viewType));
}
protected abstract VonCreateItemView(ViewGroup parent, int viewType);
// additional methods to manipulate theitems
}
~~~
下面就可以開始使用了
~~~
@EBean
public class PersonAdapter extends RecyclerViewAdapterBase<Person, PersonItemView> {
@RootContext
Context context;
@Override
protected PersonItemViewonCreateItemView(ViewGroup parent, int viewType) {
return PersonItemView_.build(context);
}
@Override
public void onBindViewHolder(ViewWrapper<PersonItemView> viewHolder, int position) {
PersonItemView view =viewHolder.getView();
Person person = items.get(position);
view.bind(person);
}
}
~~~
如果你為綁定方法創建一個接口,那么你可以把onBindViewHondler的實現移到基類中。
到此位置關于AndroidAnnotations最佳實踐Apdaters和lists,RecyclerView,ViewHolder已經全部講解完成了。
同時FastDev4Android項目已經添加配置了AndroidAnnotations框架,后期的框架項目中也會主要使用這個DI框架,.歡迎大家去Github站點進行clone或者下載瀏覽:[https://github.com/jiangqqlmj/FastDev4Android](https://github.com/jiangqqlmj/FastDev4Android)?同時歡迎大家star和fork整個開源快速開發框架項目~
- 前言
- Android快速開發框架介紹(一)
- Android首頁圖片自動無限循環輪播Gallery+FlowIndicator(二)
- Android 列表下拉刷新組件PullToRefreshListView使用(三)
- Android 數據緩存器ACache的詳解和使用(四)
- Android崩潰異常捕捉CustomCrash,提升用戶體驗(五)
- Android實現沉浸式狀態欄(六)
- AndroidAnnnotations注入框架介紹和Android Studios基本配置(七)
- AndroidAnnnotations注入框架的工作原理(八)
- AndroidAnnnotations注入框架使用之注入組件Components(九)
- AndroidAnnnotations注入框架使用之Injection標簽詳解(十)
- AndroidAnnnotations注入框架使用之事件綁定Event Binding(十一)
- AndroidAnnnotations注入框架使用之線程處理Threading(十二)
- AndroidAnnnotations注入框架使用之第三方框架集成RoboGuice(十三)
- AndroidAnnnotations注入框架使用之第三方框架集成Otto事件總線(十四)
- AndroidAnnnotations注入框架使用之第三方框架集成OrmLite(十五)
- AndroidAnnnotations注入框架使用之最佳實踐之Adapters和lists(十六)
- AndroidAnnnotations注入框架使用之最佳實踐SharedPreferences(十七)
- Android MVP開發模式詳解(十九)
- 消息總線EventBus的基本使用(二十)
- 消息總線EventBus源碼分析以及與Otto框架對比(二十一)
- 列表頭生成帶文本或者字母的圖片開源庫TextDrawable使用和詳解(二十二)
- 重寫WebView網頁加載以及JavaScript注入詳解(二十三)
- BaseAdapterHelper的基本使用介紹,讓你擺脫狂寫一堆Adapter煩惱(二十四)
- BaseAdapterHelper詳解源碼分析,讓你擺脫狂寫一堆Adapter煩惱(二十五)
- Volley完全解析之基礎使用(二十六)
- Volley完全解析之進階最佳實踐與二次封裝(二十七)
- RecyclerView完全解析,讓你從此愛上它(二十八)
- RecyclerView完全解析之打造新版類Gallery效果(二十九)
- RecyclerView完全解析之結合AA(Android Annotations)注入框架實例(三十)
- RecyclerView完全解析之下拉刷新與上拉加載SwipeRefreshLayout(三十一)
- CardView完全解析與RecyclerView結合使用(三十二)
- 神器ViewDragHelper完全解析,媽媽再也不擔心我自定義ViewGroup滑動View操作啦~(三十三)
- 神器ViewDragHelper完全解析之詳解實現QQ5.X側滑酷炫效果(三十四)
- 實例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)
- HorizontalScrollView,Fragment,FragmentStatePagerAdapter打造網易新聞Tab及滑動頁面效果(三十六)
- Android Design支持庫TabLayout打造仿網易新聞Tab標簽效果(三十七)
- 打造QQ6.X最新版本側滑界面效果(三十八)