ListView的适配(使用自定义ArrayAdapter)
本文转自:http://blog.****.net/liuyucui100/article/details/50788598
ListView在平时开发中使用的最广泛,应用也是最多的,而使用系统的适配器并不能满足我们多样化的要求,因此本文就自定义适配器展开,下面直接附上我已经测试通过的代码:
MyAdaActivity .Java:
package com.example.tiamaes.myapplication;
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MyAdaActivity extends AppCompatActivity { private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_ada); listview = (ListView) findViewById(R.id.listview); MyAdapter adapter = new MyAdapter(MyAdaActivity.this, 0, getData()); listview.setAdapter(adapter); } private List<Person> getData() { // TODO Auto-generated method stub List<Person> list= new ArrayList<Person>(); for(int i=0;i<20;i++) { Person p = new Person(R.mipmap.ic_launcher,i+"","我是第"+i+"项"); list.add(p); } return list; } }
自定义数据类型:Person.java
package com.example.tiamaes.myapplication; /** * Created by Tiamaes on 2017/8/17. */ public class Person { private int mPicture; private String mTitle; private String mContent; public Person(int picture,String title,String content){ this.mPicture = picture; this.mTitle = title; this.mContent = content; } public int getPicture() { return mPicture; } public void setmPicture(int mPicture) { this.mPicture = mPicture; } public String getTitle() { return mTitle; } public void setTitle(String mTitle) { this.mTitle = mTitle; } public String getContent() { return mContent; } public void setContent(String mContent) { this.mContent = mContent; } }
自定义适配器:MyAdapter.java
package com.example.tiamaes.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by Tiamaes on 2017/8/17. */ public class MyAdapter extends ArrayAdapter<Person> { private int resourceId; private List<Person> objects; private Context context; public MyAdapter(Context context, int resourceId, List<Person> objects) { super(context, resourceId, objects); this.resourceId=resourceId; this.objects=objects; this.context=context; } private static class ViewHolder { ImageView imageView; TextView title; TextView content; } public int getCount() { return objects.size(); } public Person getItem(int position) { return objects.get(position); } public View getView(int position, View convertView, ViewGroup parent) {
//convertView相当于listView中的某一行控件,将该行信息填写完成后,再返回给ListView ViewHolder viewHolder = null; if(convertView==null) { viewHolder=new ViewHolder(); LayoutInflater mInflater=LayoutInflater.from(context); convertView=mInflater.inflate(R.layout.item, null);//从item资源文件处加载控件布局。 viewHolder.imageView=(ImageView) convertView.findViewById(R.id.imageview); viewHolder.title=(TextView)convertView.findViewById(R.id.title); viewHolder.content=(TextView)convertView.findViewById(R.id.content); convertView.setTag(viewHolder); }else { viewHolder=(ViewHolder)convertView.getTag(); } Person person=objects.get(position); if(person!=null) { viewHolder.imageView.setBackgroundResource(person.getPicture()); viewHolder.title.setText(person.getTitle()); viewHolder.content.setText(person.getContent()); } return convertView; } }
主布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.tiamaes.myapplication.MyAdaActivity"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listview" android:layout_margin="2dp" > </ListView> </RelativeLayout>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="match_parent" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/ic_launcher" android:id="@+id/imageview" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="title" android:id="@+id/title" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/content" android:text="content" /> </LinearLayout> </LinearLayout>