ListView ( BaseAdapter )

来源:互联网 发布:js实现时间选择器区间 编辑:程序博客网 时间:2024/05/19 23:57

出处:www.csdn.net


首先看代码

listview2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <ListView        android:id="@+id/listview2listview"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </ListView>    </LinearLayout>

listitem2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="horizontal"        android:id="@+id/MyListItem2"       android:paddingBottom="3dip"       android:paddingLeft="10dip" >           <ImageView         android:id="@+id/listitem2imageview"        android:layout_height="fill_parent"        android:layout_width="wrap_content"        />    <LinearLayout        android:layout_width="wrap_content"   android:layout_height="fill_parent"   android:orientation="vertical"        >    <TextView   android:id="@+id/listitem2ItemTitle"android:layout_height="wrap_content"android:layout_width="fill_parent" android:textSize="30dip"/>  <TextView   android:id="@+id/listitem2ItemText"android:layout_height="wrap_content"android:layout_width="fill_parent"/>    </LinearLayout></LinearLayout>

ListViewActivity2.java
public class ListViewActivity2 extends Activity {private ListView listView = null;      private String[] titles={"this is title 1","this is title 2","this is title 3","this is title 4"};      private String[] texts={"this is text 1","this is text 2","this is text 3","this is text 4"};      private int[] resIds={R.drawable.ic_launcher,R.drawable.ic_launcher,                          R.drawable.ic_launcher,R.drawable.ic_launcher};          @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.listview2);          this.setTitle("ListView(BaseAdapter)");          listView=(ListView)this.findViewById(R.id.listview2listview);          listView.setAdapter(new ListViewAdapter(titles,texts,resIds));      }          public class ListViewAdapter extends BaseAdapter {          View[] itemViews;                  @Override        public View getView(int position, View convertView, ViewGroup parent) {              if (convertView == null)                  return itemViews[position];              return convertView;          }                 @Override        public int getCount() {              return itemViews.length;          }          @Override        public View getItem(int position) {              return itemViews[position];          }          @Override        public long getItemId(int position) {              return position;          }         //构造方法        public ListViewAdapter(String[] itemTitles, String[] itemTexts,                  int[] itemImageRes) {              itemViews = new View[itemTitles.length];                for (int i = 0; i < itemViews.length; i++) {                  itemViews[i] = makeItemView(itemTitles[i], itemTexts[i],                          itemImageRes[i]);              }          }                  private View makeItemView(String strTitle, String strText, int resId) {              LayoutInflater inflater = (LayoutInflater) ListViewActivity2.this                      .getSystemService(Context.LAYOUT_INFLATER_SERVICE);              //返回的这个View对象可以这样理解:布局文件xml的对象              View itemView = inflater.inflate(R.layout.listitem2, null);              // 通过findViewById()方法实例R.layout.item内各组件              TextView title = (TextView) itemView.findViewById(                                                 R.id.listitem2ItemTitle);              title.setText(strTitle);              TextView text = (TextView) itemView.findViewById(                                                 R.id.listitem2ItemText);              text.setText(strText);              ImageView image = (ImageView) itemView.findViewById(                                                 R.id.listitem2imageview);              image.setImageResource(resId);              return itemView;          }    }  }
两个xml文件不解释了

从onCreate()开始看,执行listView.setAdapter(new ListViewAdapter(titles,texts,resIds));  的时候

首先new出个我们自定义的继承自BaseAdapter的ListViewAdapter的对象,实例化的时候构造方法中会循环给itemViews数组赋值,

而itemViews中的每个元素对应listitem2.xml这个布局文件的实例

所以用LayoutInflater来实例化把得到的数据填充itemViews中去


而Android每次初始化ListView的时候是一行一行描绘出来的,每描绘一行会调用一次getView(int position, View convertView, ViewGroup parent)

描绘第n行在调用这个方法的时候给第一个参数position传的值就是n-1。所以我们直接根据position返回就好了。


截图:



ps:根据gv的改编。我也是边学边做的笔记,如果哪儿有不到位的地方希望大家指出,一起学习,一起进步。谢谢!!!


原创粉丝点击