list view优化重用 简单实现列表
先上一下效果图
首先是布局模板
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:layout_marginTop="38dp" android:id="@+id/iv_avatar" android:layout_width="40dip" android:layout_height="40dip" android:src="@mipmap/touxiang" /> <TextView android:layout_marginTop="38dp" android:id="@+id/txt_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/iv_avatar" android:text="刘专家" /> <TextView android:id="@+id/txt_discrination" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/txt_nickname" android:layout_toRightOf="@+id/iv_avatar" android:text="科学院院士/海淀医院主任" /> </RelativeLayout>
接下来是一个以List view为根节点的xml文件
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/lv_listview" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ListView>
<!---作为根节点 一定要有命名空间-->
接下来是我们的适配器用来反射数据到我们的视图上面以及绑定数据
package com.example.wendaxitong.imtao.adapter; import android.content.Context; import android.support.annotation.Nullable; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.wendaxitong.imtao.R; import com.example.wendaxitong.imtao.friendModel; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2018/5/23 0023. */ //自定义适配器继承自BaseAdapter public class FriendsAdapter extends BaseAdapter { private ArrayList<friendModel> mData; private Context context; //提供一个构造器 public FriendsAdapter(Context context, ArrayList data) { this.mData = data; this.context = context; } //决定了列表项显示的个数 @Override public int getCount() { return mData.size(); } //根据position 获取对应的列表框的数据 @Override public Object getItem(int position) { return mData.get(position);// } //根据position 获取对应position 列表项目的id位置 @Override public long getItemId(int position) { return position; } /** * 创建列表item 视图 * * @param convertView 缓存的View */ @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d("bihu", "" + convertView); View view = null; Holder holder=null; if (convertView != null) { view = convertView; holder=(Holder) view.getTag(); } else { view = View.inflate(context, R.layout.item_friend, null); holder=new Holder(); holder.iv_avatar = (ImageView) view.findViewById(R.id.iv_avatar); holder.txt_nickname = (TextView) view.findViewById(R.id.txt_nickname); holder.txt_description = (TextView) view .findViewById(R.id.txt_discrination); view.setTag(holder); } // 获取item对应数据对象 friendModel friend = mData.get(position); // 初始化View // 绑定数据到View holder.iv_avatar.setImageResource(friend.getAcatar()); holder.txt_nickname.setText(friend.getNickname()); holder.txt_description.setText(friend.getDesccription()); // 返回绑定完数据的View return view; }
private static class Holder{ public ImageView iv_avatar; public TextView txt_nickname; public TextView txt_description; } }接下来是我们的主要activity
package com.example.wendaxitong.imtao; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.widget.Adapter; import android.widget.ListView; import com.example.wendaxitong.imtao.adapter.FriendsAdapter; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2018/5/23 0023. */ public class friendslistActivity extends Activity { //view private ListView lv_list; //适配器 private FriendsAdapter mAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.view_listview); lv_list = findViewById(R.id.lv_listview); mAdapter = new FriendsAdapter(this, getData()); lv_list.setAdapter(mAdapter); } private ArrayList<friendModel> getData() { ArrayList<friendModel> list = new ArrayList<friendModel>(); friendModel friend1 = new friendModel(); friend1.setAcatar(R.mipmap.touxiang); friend1.setNickname("刘专家"); friend1.setDesccription("海淀医院主任/海淀医院主任"); friendModel friend2 = new friendModel(); friend2.setAcatar(R.mipmap.touxiang); friend2.setNickname("刘专家"); friend2.setDesccription("海淀医院主任/海淀医院主任"); friendModel friend3 = new friendModel(); friend3.setAcatar(R.mipmap.touxiang); friend3.setNickname("刘专家"); friend3.setDesccription("海淀医院主任/海淀医院主任"); friendModel friend4 = new friendModel(); friend4.setAcatar(R.mipmap.touxiang); friend4.setNickname("刘专家" ); friend4.setDesccription("海淀医院主任/海淀医院主任"); friendModel friend5 = new friendModel(); friend5.setAcatar(R.mipmap.touxiang); friend5.setNickname("刘专家"); friend5.setDesccription("海淀医院主任/海淀医院主任"); list.add(friend1); list.add(friend2); list.add(friend3); list.add(friend4); list.add(friend5); return list; } }
最后还需要一个外部引用的对象
package com.example.wendaxitong.imtao; /** * Created by Administrator on 2018/5/24 0024. */ // 定义三个成员变量 调用set get方法 public class friendModel { //图片的资源id private int iv_avatar; //昵称 private String txt_nickname; //个性签名 描述 private String txt_discrination; public int getAcatar() { return iv_avatar; } public void setAcatar(int acatar) { this.iv_avatar = acatar; } public String getNickname() { return txt_nickname; } public void setNickname(String nickname) { this.txt_nickname = nickname; } public String getDesccription() { return txt_discrination; } public void setDesccription(String desccription) { this.txt_discrination = desccription; } }
好了 大功告成 有不足之处 后续还会补充