Android开发学习(7)ListView

来源:互联网 发布:尼康d810调焦软件 编辑:程序博客网 时间:2024/05/16 01:33

很多时候,我们需要以列表的方式展示我们的商品,类似通讯录中联系人的列表展示页,今天我们就开始使用ListView做一个类似的功能

ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件。先说说ListView的实现:

添加步骤:

  • 准备ListView要显示的数据 ;
  • 使用 一维或多维 动态数组 保存数据;
  • 构建适配器 , 简单地来说, 适配器就是 Item数组 , 动态数组 有多少元素就生成多少个Item;
  • 把 适配器 添加到ListView,并显示出来。

简单模式

效果图
ListViews

主页面:

listview_diarys.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:id="@+id/LL_ListViewDiarys"              android:layout_width="fill_parent"              android:layout_height="fill_parent">    <!--list父窗口 -->    <ListView android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:id="@+id/LV_Diarys">    </ListView></LinearLayout>

列表元素

listitem_diary.xml

<?xml version="1.0" encoding="utf-8"?><!--list中每个单元定义窗口 --><LinearLayout android:layout_width="fill_parent"              xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_height="wrap_content"              android:id="@+id/ListItem_Diary"              android:paddingBottom="3dip"              android:paddingLeft="10dip">    <TextView            android:layout_height="wrap_content"            android:layout_width="fill_parent"            android:id="@+id/ItemTitle"            android:textSize="15sp">    </TextView>    <TextView            android:layout_height="wrap_content"            android:layout_width="fill_parent"            android:id="@+id/ItemText">    </TextView></LinearLayout>

加载列表

ListViewDiarysActivity.java

package com.xvshu.android;import android.app.Activity;import android.os.Bundle;import android.widget.ListView;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;/** * Created by xvshu on 2017/8/9. */public class ListViewDiarysActivity extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview_diarys);        //绑定XML中的ListView,作为Item的容器        ListView list = (ListView) findViewById(R.id.LV_Diarys);        //生成动态数组,并且转载数据        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();        for(int i=0;i<30;i++)        {            HashMap<String, String> map = new HashMap<String, String>();            map.put("ItemTitle", "This is Title "+i);            map.put("ItemText", "This is text "+i);            mylist.add(map);        }        //生成适配器,数组===》ListItem        SimpleAdapter mSchedule = new SimpleAdapter(this,                mylist,//数据来源                R.layout.listitem_diary,//ListItem的XML实现                //动态数组与ListItem对应的子项                new String[] {"ItemTitle", "ItemText"},                //ListItem的XML文件里面的两个TextView ID                new int[] {R.id.ItemTitle,R.id.ItemText});        //添加并且显示        list.setAdapter(mSchedule);    }}

加入图片

效果图
img

元素扩展

<?xml version="1.0" encoding="utf-8"?><!--list中每个单元定义窗口 --><RelativeLayout        android:layout_width="fill_parent"        xmlns:android="http://schemas.android.com/apk/res/android"        android:layout_height="wrap_content"        android:paddingBottom="4dip"        android:paddingLeft="12dip">    <ImageView            android:layout_width="wrap_content"            android:id="@+id/itemImage"            android:layout_height="fill_parent"            android:src="@drawable/ic_android">    </ImageView>    <TextView            android:text="TextView01"            android:layout_height="wrap_content"            android:layout_width="fill_parent"            android:id="@+id/itemTitle"            android:layout_toRightOf="@+id/itemImage"            android:textSize="20dip">    </TextView>    <TextView            android:text="TextView02"            android:layout_height="wrap_content"            android:layout_width="fill_parent"            android:id="@+id/itemText"            android:layout_toRightOf="@+id/itemImage"            android:layout_below="@+id/itemTitle">    </TextView></RelativeLayout>

加载器扩展

package com.xvshu.android;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.*;import java.util.ArrayList;import java.util.HashMap;/** * Created by xvshu on 2017/8/9. */public class ListViewDiarysActivity extends Activity {    ListView listView;    String[] titles={"标题1","标题2","标题3","标题4"};    String[] texts={"文本内容A","文本内容B","文本内容C","文本内容D"};    int[] resIds={R.drawable.ic_android,R.drawable.ic_android,R.drawable.ic_android,R.drawable.ic_android};    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.listview_diarys);        //绑定XML中的ListView,作为Item的容器        listView = (ListView) findViewById(R.id.LV_Diarys);        listView.setAdapter(new ListViewAdapter(titles,texts,resIds));    }    public class ListViewAdapter extends BaseAdapter {        View[] itemViews;        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]);            }        }        public int getCount() {            return itemViews.length;        }        public View getItem(int position) {            return itemViews[position];        }        public long getItemId(int position) {            return position;        }        private View makeItemView(String strTitle, String strText, int resId) {            LayoutInflater inflater = (LayoutInflater) ListViewDiarysActivity.this                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);            // 使用View的对象itemView与R.layout.item关联            View itemView = inflater.inflate(R.layout.listitem_diary, null);            // 通过findViewById()方法实例R.layout.item内各组件            TextView title = (TextView) itemView.findViewById(R.id.itemTitle);            title.setText(strTitle);            TextView text = (TextView) itemView.findViewById(R.id.itemText);            text.setText(strText);            ImageView image = (ImageView) itemView.findViewById(R.id.itemImage);            image.setImageResource(resId);            return itemView;        }        public View getView(int position, View convertView, ViewGroup parent) {            if (convertView == null)                return itemViews[position];            return convertView;        }    }}

总结

越走进安卓越发现,和java重合度非常高,页面也是,类似web的布局,如果有前端的经验,可以说入手完全无压力,希望大家一起学习,越来越对移动开发熟悉,了解,形成自己的逻辑。

原创粉丝点击