listView BaseAdapter

主界面:activity_main.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/lv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:fastScrollEnabled="true"/>
LinearLayout>

可以看得出来,这就是一个listview的组件。

item,也就是每个卡片的布局,一个listview是由多个卡片组成的。

list_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:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            />
        <TextView
            android:id="@+id/info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="14sp"
            />
    LinearLayout>


LinearLayout>

从上面可以看得出卡片的布局很简单,这是一个图片和textview组成的

下面是主的activity:

代码如下:

 
  
public class MainActivity extends AppCompatActivity {
    private ListView lv;
    private List> data;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1、实例化listview布局
        lv = (ListView)findViewById(R.id.lv);
        //2、设置数据源
        data = getData();
        //3、实例化适配器  实现把数据放在数组里面,以便进行显示。
        MyAdapter adapter = new MyAdapter(this,data);
        //4、为listview设置适配器  
        lv.setAdapter(adapter);
    }

    private List> getData()
    {
        List> list = new ArrayList>();
        Map map;
        for(int i=0;i<10;i++)
        {
            map = new HashMap();
            map.put("img", R.mipmap.ic_launcher);
            map.put("title", "跆拳道");
            map.put("info", "快乐源于生活...");
            list.add(map);
        }
        return list;
    }
}
下面是MyAdapter适配器

public class MyAdapter extends BaseAdapter {
    public LayoutInflater mInflater = null;
    private List> data;

    ////根据context上下文加载布局,这里的是Demo17Activity本身,即this
    public MyAdapter(Context context,List> data) {
        this.mInflater = LayoutInflater.from(context);//LayoutInflater获取布局文件
        this. data=data;
    }

    @Override
    public int getCount() {//数组的长度
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        //如果缓存convertView为空,则需要创建View
        if(convertView == null) {
            holder = new ViewHolder();
            //根据自定义的Item布局加载布局
            convertView = mInflater.inflate(R.layout.list_item, null);
            holder.img = (ImageView)convertView.findViewById(R.id.img);
            holder.title = (TextView)convertView.findViewById(R.id.tv);
            holder.info = (TextView)convertView.findViewById(R.id.info);
            //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder)convertView.getTag();
        }
        holder.img.setBackgroundResource((Integer)data.get(position).get("img"));
        holder.title.setText((String)data.get(position).get("title"));
        holder.info.setText((String)data.get(position).get("info"));

        return convertView;
    }
    //内部类
    static class ViewHolder
    {
        public ImageView img;
        public TextView title;
        public TextView info;
    }

}


你可能感兴趣的:(androidstudio)