編輯:關於android開發
(一).前言:
前面我們已經對於AndroidAnnotations框架集成OrmLite做了講解,今天我們開始具體學習一下使用DI框架在Adapters和lists中的使用方法。
(二).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 findAll();
}
我們現在需要創建一個PersonListActivity來列出所有的人。為了達到這一目的,我們需要一個PersonListAdater適配器來進行綁定數據到view中。並且同時需要PersonItemView,該用來表示列表中每一項item。我們這邊使用的PersonItemView將會有兩個Textview,實例如下:
@EViewGroup(R.layout.person_item)
public classPersonItemView 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 classPersonListAdapter extends BaseAdapter {
List 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 classPersonListActivity 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 classViewWrapper為所有的RecyclerView適配器創建一個基類extends RecyclerView.ViewHolder { private V view; public ViewWrapper(V itemView) { super(itemView); view = itemView; } public V getView() { return view; } }
public abstractclass RecyclerViewAdapterBase下面就可以開始使用了extendsRecyclerView.Adapter > { protected List items = newArrayList (); @Override public int getItemCount() { return items.size(); } @Override public final ViewWrapper onCreateViewHolder(ViewGroup parent, int viewType) { return newViewWrapper (onCreateItemView(parent, viewType)); } protected abstract VonCreateItemView(ViewGroup parent, int viewType); // additional methods to manipulate theitems }
@EBean public classPersonAdapter extends RecyclerViewAdapterBase如果你為綁定方法創建一個接口,那麼你可以把onBindViewHondler的實現移到基類中。{ @RootContext Context context; @Override protected PersonItemViewonCreateItemView(ViewGroup parent, int viewType) { return PersonItemView_.build(context); } @Override public voidonBindViewHolder(ViewWrapper viewHolder, int position) { PersonItemView view =viewHolder.getView(); Person person = items.get(position); view.bind(person); } }
到此位置關於AndroidAnnotations最佳實踐Apdaters和lists,RecyclerView,ViewHolder已經全部講解完成了。
安卓應用的界面編程(2),安卓應用界面編程
安卓應用的界面編程(2),安卓應用界面編程第一組UI組件:布局管理器(以ViewGroup為基類派生的布局管理器) 1.線性布局 LinearLayout類 1 <
Android學習指南之三十四:Android定時器Timer的使用
我們將JDK中自帶的Timer和TimerTask兩個類結合使用,可以實現執行
Volley源碼解析
Volley源碼解析 很早之前就想寫下關於Volley的源碼解析。一開始學android網絡訪問都是使用HttpClient,剛接觸麼Volley的時候就瞬間愛不釋手
【Android開發—電商系列】(二):仿淘寶商品屬性標簽頁
【Android開發—電商系列】(二):仿淘寶商品屬性標簽頁 一睹為快 需求 1.動態加載屬性,如尺碼,顏色,款式等 由於每件商品的屬性是不確定的,有的商