AndroidAnnotations——Adapters and lists 适配器和列表

来源:互联网 发布:北京软件著作权申请 编辑:程序博客网 时间:2024/05/17 07:46

Adapters and lists

This is just a simple demonstration of how you could handle Adapters and AdapterViews in a simple way with AndroidAnnotations.
这是一个使用AndroidAnnotations处理 Adapters AdapterViews的简单示例

Let's say you have a Person class:
让我们假设你有这么一个 Person类:
public class Person {    public final String firstName;    public final String lastName;    public Person(String firstName, String lastName) {        this.firstName = firstName;        this.lastName = lastName;    }}

and a PersonFinder interface:
和一个 PersonFinder接口:
public interface PersonFinder {    List<Person> findAll();}
We want to create a PersonListActivity that lists all the available persons. For that, we'll need aPersonListAdapter that binds the data to the views, and a PersonItemView that is the view for one item in the list.
我们想创建 PersonListActivity来列出所有有效人员。因此,我们需要一个PersonListAdapter 来绑定数据到视图上,PersonItemView 是列表项的视图。

The PersonItemView will use one TextView for the first name, and one TextView for the last name:

 PersonItemView将使用一个TextView 显示first name,另一个TextView 显示last name
@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);    }}
Notice that creating a custom view group that has its child views injected removes the need to use a View Holder Pattern.
请注意,创建一个有子视图注入的自定义视图组不需要使用View Holder Pattern

There's a PersonFinder implementation, let's say InMemoryPersonFinder, that is annotated with@EBean. We won't describe this implementation.
 InMemoryPersonFinderPersonFinder 的实现类,用@EBean注解。我们不再描述这个实现类。

The adapter directly manipulates it to bind its data and create the corresponding views:
适配器直接操作实现类,并绑定数据,创建相应的视图:

@EBeanpublic 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, View convertView, 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;    }}

The PersonListActivity binds the PersonListAdapter to a ListView, and displays a toast when aPersonItemView is clicked. 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();    }}

本文档的简单示例下载

0 0