ListView应用Demo使用自定义的适配器继承BaseAdapter

来源:互联网 发布:记忆训练软件 编辑:程序博客网 时间:2024/05/16 07:00

使用ListView大部分都会使用自定义的适配器来达到显示更多种多样的内容,所以下面的例子就简单的使用了自定义的适配器。

1.XML文件代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >    <ListView        android:id="@+id/ListViewID"        android:layout_width="match_parent"        android:layout_height="wrap_content" >    </ListView></LinearLayout>

2.ListView的item子布局XML文件代码:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal" >    <ImageView        android:id="@+id/imageviewID"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/ic_launcher" />    <TextView        android:id="@+id/textviewID"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="内容"        android:textSize="24sp" /></LinearLayout>
3.自定义的适配器文件MyAdapter.java文件的代码如下:

public class MyAdapter extends BaseAdapter {//通过构造方法也可以传过来一个List<E> list集合,E类型为自定义的一个封装数据的实体类LayoutInflater inflater;/**带参的构造方法*/public MyAdapter(Context context) {this.inflater=LayoutInflater.from(context);}/**该方法的返回值控制该Adapter包含多少个列表项(item)*/@Overridepublic int getCount() {//如果传过来集合,此处为list.sizereturn 30;}/**该方法的返回值决定第position处的列表项(item)的内容*/@Overridepublic Object getItem(int position) {//如果传过来集合,此处为list.get(position);return null;}/**该方法的返回值决定第position处的列表项(item)的ID*/@Overridepublic long getItemId(int position) {return position;}/**该方法的返回值决定第position处的列表项(item)组件*/@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=null;if (convertView==null) {holder=new ViewHolder();convertView=inflater.inflate(R.layout.listview_item, null);holder.imageView=(ImageView) convertView.findViewById(R.id.imageviewID);holder.textView=(TextView) convertView.findViewById(R.id.textviewID);convertView.setTag(holder);}else {holder=(ViewHolder) convertView.getTag();}//通过list.get(position);获得封装数据的实体类的实例,然后再获取里面的数据设置到相应的控件上//设置TextView的内容holder.textView.setText("第"+position+"个item");//设置ImageView的图片holder.imageView.setImageResource(R.drawable.nantou);return convertView;}/**优化ListView所定义的重用类*/class ViewHolder{//item布局文件上面有一个ImageView和一个TextView,所以我们这里需要定义2个ViewImageView imageView;TextView textView;}}

说明:上面的方法中第1个和第4个很重要。

4.MainActivity.java文件代码如下:
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ListView listView=(ListView) findViewById(R.id.ListViewID);MyAdapter adapter=new MyAdapter(this);listView.setAdapter(adapter);}}
5.最终运行效果:


0 0
原创粉丝点击