Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> AndroidAnnnotations注入框架使用之最佳實踐之Adapters和lists(十六)

AndroidAnnnotations注入框架使用之最佳實踐之Adapters和lists(十六)

編輯:關於android開發

AndroidAnnnotations注入框架使用之最佳實踐之Adapters和lists(十六)


 

 

(一).前言:

前面我們已經對於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 extends RecyclerView.ViewHolder {
 
    private V view;
 
    public ViewWrapper(V itemView) {
        super(itemView);
        view = itemView;
    }
 
    public V getView() {
        return view;
    }
}
為所有的RecyclerView適配器創建一個基類

 

 

public abstractclass RecyclerViewAdapterBase extendsRecyclerView.Adapter> {
 
    protected List items = newArrayList();
 
    @Override
    public int getItemCount() {
        return items.size();
    }
 
    @Override
    public final ViewWrapperonCreateViewHolder(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 {
 
    @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);
    }
 
}
如果你為綁定方法創建一個接口,那麼你可以把onBindViewHondler的實現移到基類中。

 

到此位置關於AndroidAnnotations最佳實踐Apdaters和lists,RecyclerView,ViewHolder已經全部講解完成了。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved