你的位置:首页 > 操作系统

[操作系统]Android 采用Layout Inflater创建一个View对象


接着上文《Android ListViewview入门》,本文使用android的Inflater来实现

在layouyt文件夹中新建一个list_item.

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:id="@+id/ll_root"  android:layout_width="match_parent"  android:layout_height="60dip"  android:gravity="center_vertical"  android:orientation="horizontal">  <TextView    android:id="@+id/tv_id"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginLeft="5dip"    android:text="id"    android:textColor="#ff0000"    android:textSize="16sp" />  <LinearLayout    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:layout_marginLeft="20dip"    android:gravity="center_vertical"    android:orientation="vertical" >    <TextView      android:id="@+id/tv_name"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_marginLeft="5dip"      android:text="姓名"      android:textColor="#000000"      android:textSize="18sp" />    <TextView      android:id="@+id/tv_phone"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_marginLeft="5dip"      android:layout_marginTop="5dip"      android:text="电话"      android:textColor="#88000000"      android:textSize="16sp" />  </LinearLayout></LinearLayout>

界面布局如下:

代码如下:

package com.wuyudong.db;import java.util.List;import com.wuyudong.db.dao.PersonDao;import com.wuyudong.db.domain.Person;import android.os.Bundle;import android.text.style.LeadingMarginSpan;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.TextView;import android.app.Activity;import android.graphics.Color;public class MainActivity extends Activity {  private ListView lv;  private List<Person> persons;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    PersonDao dao = new PersonDao(this);    persons = dao.findAll();    lv = (ListView) findViewById(R.id.lv);    lv.setAdapter(new MyAdapter());  }  // 默认实现类形如: simplexxx, basexxx, defaultxxx  private class MyAdapter extends BaseAdapter {    private static final String TAG = "MyAdapter";    /**     * 控制ListView里面总共有多少条目     */    @Override    public int getCount() {      return persons.size(); // 条目个数==集合的size    }    @Override    public Object getItem(int position) {      // TODO Auto-generated method stub      return null;    }    @Override    public long getItemId(int position) {      // TODO Auto-generated method stub      return 0;    }    //控制每个条目所显示的内容,依据position表示的位置来显示    @Override    public View getView(int position, View convertView, ViewGroup parent) {            // 得到某个位置对应的person对象      Person person = persons.get(position);      View view = View.inflate(MainActivity.this, R.layout.list_item, null);      //一定要在view对象里面寻找孩子的id       TextView tv_id = (TextView)view.findViewById(R.id.tv_id);      tv_id.setText("id:" +person.getId());             TextView tv_name = (TextView)view.findViewById(R.id.tv_name);      tv_name.setText("姓名:" +person.getName());            TextView tv_phone = (TextView)view.findViewById(R.id.tv_phone);      tv_phone.setText("电话:" +person.getNumber());      return view;          }  }}

运行后的效果如下:

如果将上面的代码tv_id.setText("id:" +person.getId());改为tv_id.setText(person.getId()); 程序会报错。

原因:person.getId()返回值为int类型,而setText函数会从R资源文件中查找,显然是找不到的。

所以修改为tv_id.setText(person.getId()+""); 即可


总结:

##listview使用的步骤
1. 定义布局文件 2. 找到listview
3. 设置数据适配器
4. 实现getCount() 返回有多少个条目
5. 实现getView() 返回每个位置显示的内容view对象。
6. 优化listview 复用 convertView