当前位置: 代码迷 >> Android >> 【FastDev4Android框架开发】AndroidAnnnotations流入框架使用之最佳实践之Adapters和lists(十六)
  详细解决方案

【FastDev4Android框架开发】AndroidAnnnotations流入框架使用之最佳实践之Adapters和lists(十六)

热度:211   发布时间:2016-04-27 22:22:53.0
【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之最佳实践之Adapters和lists(十六)

转载请标明出处: 

http://blog.csdn.net/developer_jiangqq/article/details/49531669
本文出自:【江清清的博客】

().前言:   

        前面我们已经对于AndroidAnnotations框架集成OrmLite做了讲解,今天我们开始具体学习一下使用DI框架在Adapters和lists中的使用方法。

      FastDev4Android框架项目地址:https://github.com/jiangqqlmj/FastDev4Android 

().Apdaterslists介绍使用:   

         这边只是展示一下使用AndroidAnnotations来进行简单处理AdapterAdapterView。下面是使用实例:

首先先由一个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 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进行注解。适配器直接操作数据并且创建视图来显示这些数据;

@EBeanpublic classPersonListAdapter 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绑定PersonListAdapterListView中,但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();    }}
 ().RecyclerViewViewHolder使用:

如果你使用的是RecyclerView而不是简单的ListView,那么就要特殊处理了。RecyclerView.Apdater创建ViewHolder而不是view。所以你这边就不能简单注入ViewHolder类了,但是你可以使用@EViewGroup来进行注解。

现在创建一个泛型类来把所有类型的View包装成ViewHondler

public classViewWrapper<V extends View> extends RecyclerView.ViewHolder {     private V view;     public ViewWrapper(V itemView) {        super(itemView);        view = itemView;    }     public V getView() {        return view;    }}
为所有的RecyclerView适配器创建一个基类

public abstractclass RecyclerViewAdapterBase<T, V extends View> extendsRecyclerView.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 newViewWrapper<V>(onCreateItemView(parent, viewType));    }     protected abstract VonCreateItemView(ViewGroup parent, int viewType);     // additional methods to manipulate theitems}
下面就可以开始使用了

@EBeanpublic classPersonAdapter extends RecyclerViewAdapterBase<Person, PersonItemView> {     @RootContext    Context context;     @Override    protected PersonItemViewonCreateItemView(ViewGroup parent, int viewType) {        return PersonItemView_.build(context);    }     @Override    public voidonBindViewHolder(ViewWrapper<PersonItemView> viewHolder, int position) {        PersonItemView view =viewHolder.getView();        Person person = items.get(position);         view.bind(person);    } }
如果你为绑定方法创建一个接口,那么你可以把onBindViewHondler的实现移到基类中。

        到此位置关于AndroidAnnotations最佳实践Apdaterslists,RecyclerView,ViewHolder已经全部讲解完成了。

同时FastDev4Android项目已经添加配置了AndroidAnnotations框架,后期的框架项目中也会主要使用这个DI框架,.欢迎大家去Github站点进行clone或者下载浏览:https://github.com/jiangqqlmj/FastDev4Android 同时欢迎大家starfork整个开源快速开发框架项目~

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案