Android ListView绑定数据

ListView绑定数据的三层:

ListView绑定数据源从逻辑上可以分为三层:UI层,逻辑层,数据层。

  1. UI层:UI层即是ListView控件。
  2. 数据层:要展示到ListView控件上面的数据。
  3. 逻辑层:Adapter的功能是将数据源通过Adapter内部定义的逻辑绑定到ListView控件。

ListView绑定数据相关的组件介绍:

  • ListView控件:是一个列表控件,主要用来承载列表中的每个控件
  • item layout resource:用来定义ListView中每个Item的样式。
  • Adapter:用来将数据源绑定到ListView控件,并可以实现控件的利用。

ListView数据源绑定方式

  • ArrayAdapter
  • SimpleAdapter
  • Custom Adapter

ArrayAdapter
这种绑定方式比较简单直接绑定即可,代码如下:
listViewListAdapter.setAdapter((ListAdapter) arrayAdapter());

private Adapter ArrayAdapter(){
List data = new ArrayList();
data.add("1");
data.add("2");
data.add("3");
data.add("4");

   return new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,data)
}

SimpleAdapter
listViewPersons.setAdapter((ListAdapter)simpleAdapter(getSampleData()));
private Adapter simpleAdapter(List list){
List<HashMap<String,Object>> data=new ArrayList<HashMap<String, Object>>();

    for (Person person:list){
        HashMap<String,Object> item=new HashMap<>();
        item.put("name",person.getName());
        item.put("sex",person.getSex());
        item.put("age",person.getAge());
        item.put("address",person.getAddress());

        data.add(item);
    }

    SimpleAdapter simpleAdapter=new SimpleAdapter(getApplicationContext(),data,R.layout.item,new String[]{"name","sex","age","address"},new int[]{R.id.textViewName,R.id.textViewSex,R.id.textViewAge,R.id.textViewAddress});

    return  simpleAdapter;
}

Custom Adapter
public class Person {
private String name;

private String sex;

private String age;

private String address;

public Person(String name, String sex, String age, String address) {
    this.name = name;
    this.sex = sex;
    this.age = age;
    this.address = address;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSex() {
    return sex;
}

public void setSex(String sex) {
    this.sex = sex;
}

public String getAge() {
    return age;
}

public void setAge(String age) {
    this.age = age;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

}
public class PersonAdapter extends BaseAdapter {
private List persons;
private int resource;
private LayoutInflater inflater;

public PersonAdapter(Context context,List<Person> persons, int resource){
    this.persons=persons;
    this.resource=resource;

    inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return persons.size();
}

@Override
public Object getItem(int position) {
    return persons.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    TextView textViewName=null;
    TextView textViewSex=null;
    TextView textViewAge=null;
    TextView textViewAddress=null;

    if(convertView==null){
        convertView=inflater.inflate(resource,null);

        textViewName=(TextView)convertView.findViewById(R.id.textViewName);
        textViewSex=(TextView)convertView.findViewById(R.id.textViewSex);
        textViewAge=(TextView)convertView.findViewById(R.id.textViewAge);
        textViewAddress=(TextView)convertView.findViewById(R.id.textViewAddress);

        ViewCache viewCache=new ViewCache();
        viewCache.setTextViewName(textViewName);
        viewCache.setTextViewSex(textViewSex);
        viewCache.setTextViewAge(textViewAge);
        viewCache.setTextViewAddress(textViewAddress);

        convertView.setTag(viewCache);
    }else{
        ViewCache viewCache=(ViewCache)convertView.getTag();

        textViewName=viewCache.getTextViewName();
        textViewSex=viewCache.getTextViewSex();
        textViewAge=viewCache.getTextViewAge();
        textViewAddress=viewCache.getTextViewAddress();
    }


    Person person=persons.get(position);
    textViewName.setText(person.getName());
    textViewSex.setText(person.getSex());
    textViewAge.setText(person.getAge());
    textViewAddress.setText(person.getAddress());

    return convertView;
}

public class ViewCache{
    private TextView textViewName;
    private TextView textViewSex;
    private TextView textViewAge;
    private TextView textViewAddress;

    public TextView getTextViewName() {
        return textViewName;
    }

    public void setTextViewName(TextView textViewName) {
        this.textViewName = textViewName;
    }

    public TextView getTextViewSex() {
        return textViewSex;
    }

    public void setTextViewSex(TextView textViewSex) {
        this.textViewSex = textViewSex;
    }

    public TextView getTextViewAge() {
        return textViewAge;
    }

    public void setTextViewAge(TextView textViewAge) {
        this.textViewAge = textViewAge;
    }

    public TextView getTextViewAddress() {
        return textViewAddress;
    }

    public void setTextViewAddress(TextView textViewAddress) {
        this.textViewAddress = textViewAddress;
    }
}

}

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listViewPersons.setAdapter((ListAdapter) customAdapter(getSampleData()));
}


private Adapter customAdapter(List<Person> list){
    PersonAdapter personAdapter=new PersonAdapter(getApplicationContext(),list,R.layout.item);

    return  personAdapter;
}  

}

Sample data
private List getSampleData(){
List persons=new ArrayList();
persons.add(new Person("萧峰","男","32","大辽"));
persons.add(new Person("阿朱","女","16","江南"));
persons.add(new Person("段誉","男","22","大理"));
persons.add(new Person("王语嫣","女","18","江南"));
persons.add(new Person("虚竹","男","24","河南"));
persons.add(new Person("梦姑","女","20","西夏"));

    return persons;
}

转载于:https://www.cnblogs.com/yujie365/p/6651484.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值