編輯:關於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 { ListfindAll(); }
我們現在需要創建一個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 { ListPersonListActivity綁定PersonListAdapter到ListView中,但PersonItemView被點擊的時候,顯示一個toast。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; } }
@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),安卓應用界面編程第一組UI組件:布局管理器(以ViewGroup為基類派生的布局管理器) 1.線性布局 LinearLayout類 1 <
我們將JDK中自帶的Timer和TimerTask兩個類結合使用,可以實現執行
Volley源碼解析 很早之前就想寫下關於Volley的源碼解析。一開始學android網絡訪問都是使用HttpClient,剛接觸麼Volley的時候就瞬間愛不釋手
【Android開發—電商系列】(二):仿淘寶商品屬性標簽頁 一睹為快 需求 1.動態加載屬性,如尺碼,顏色,款式等 由於每件商品的屬性是不確定的,有的商