android樣式布局--->ListView(附上原始碼)

來源:互聯網
上載者:User

標籤:

在android應用開發過程中,Listview 是經常使用的資料展現控制項,往往用於顯示列表形式的資料。

假設只顯示資料往往會顯得非常單調。非常多時候依據須要定義不同的item 背景選項。比如定義資料的標題。表頭或者間隔顯示Listview item背景內容。

的所看到的的背景內容,如今以一個WeatherDemo為模型分析Listview的相關用法。


實現思路:定義Listview不同的背景,首先要定義好標題與表格內容的兩個不同的xml布局檔案(city_item.xml,content_item.xml)。

在填充資料的時候往往採用構造一個Adapter資料類型,依據構造的資料類型,推斷不同的資料類型,採用LayoutInflater類填充不同的layout檔案,從而返回不同的View。


構造WeatherAdapter類繼承BaseAdapter並實現相關的介面函數,實現對列表資料的填充。

當中資料的結構比較關鍵,能夠控制相關的標題和內容的關係。

WeatherAdapter類則主要是實現並填充對應的資料。顯示相關資料。

程式碼例如以下:

public class WeatherAdapter extends BaseAdapter {// 資料來源private List<HashMap<String, String>> list;private Context context;private int[] type;// 建構函式public WeatherAdapter(Context context, List<HashMap<String, String>> list, int[] type) {this.context = context;this.list = list;this.type = type;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn list.get(position);}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLayoutInflater mInflater = LayoutInflater.from(context);// 產生一個ViewView view = null;// 依據type不同的資料類型構造不同的View,也能夠依據1,2,3天數構造不同的樣式if (type[position] == 0) {view = mInflater.inflate(R.layout.city_item, null);// 擷取城市名稱String cityName = list.get(position).get("data");ImageView image = (ImageView) view.findViewById(R.id.weather_image);if (cityName.equals("北京")) {image.setImageResource(R.drawable.beijing);} else if (cityName.equals("上海")) {image.setImageResource(R.drawable.shanghai);} else if (cityName.equals("廣州")) {image.setImageResource(R.drawable.guangzhou);} else if (cityName.equals("深圳")) {image.setImageResource(R.drawable.shenzhen);}TextView city = (TextView) view.findViewById(R.id.city);city.setText(cityName);} else {view = mInflater.inflate(R.layout.content_item, null);// 擷取資料String content = list.get(position).get("data");// 分離資料String[] items = content.split(",");TextView weather = (TextView) view.findViewById(R.id.content);weather.setText(items[0] + "天氣: " + items[1] + ";溫度:  " + items[2]);TextView date = (TextView) view.findViewById(R.id.date);date.setText(items[3]);}return view;}}

MainActivity.java 

public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);ListView list = (ListView) findViewById(R.id.list_items);ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();// 各個城市的天氣String[] data = { "廣州", "今天,晴天,22℃,2014-4-18","明天,多雲轉陣雨,32~23℃,2014-4-19", "後天,陰轉多雲,33~23℃,2014-4-20", "上海","今天,陣雨轉雷陣雨,31~25℃,2014-4-18", "明天,雷陣雨轉陰,31~24℃,2014-4-19","後天,陣雨轉多雲,32~27℃,2014-4-20", "北京", "今天,中雨轉暴雨,32~25℃,2014-4-18","明天,暴雨轉大到暴雨,29~25℃,2014-4-19", "後天,暴雨轉陣雨,29~25℃,2014-4-20","深圳", "今天,中雨轉暴雨,31~25℃,2014-4-18", "明天,暴雨,29~24℃,2014-4-19","後天,大雨轉陣雨,28~25℃,2014-4-20" };// 能夠是城市的類型推斷或者第幾天推斷,依據不同的需求構造不同的數組結構適應不同的應用int[] type = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };int size = data.length;for (int i = 0; i < size; i++) {HashMap<String, String> map = new HashMap<String, String>();// 依據不同需求能夠構造更複雜的資料,眼下之構造一個資料map.put("data", data[i]);listItem.add(map);}WeatherAdapter listItemAdapter = new WeatherAdapter(this, listItem, type);list.setAdapter(listItemAdapter);}}


三個xml布局檔案:


city_item.xml

<?xml version="1.0" encoding="utf-8"?

><!-- items選項 --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#9ACD32" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" > <ImageView android:id="@+id/weather_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="4dip" android:contentDescription="@string/weather_image"/> <TextView android:id="@+id/city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textColor="@color/black" android:textSize="18sp"/></RelativeLayout>


content_item.xml

<?xml version="1.0" encoding="utf-8"?

><!-- items選項 --><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout02" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:paddingBottom="4dip" android:paddingLeft="12dip" android:paddingRight="12dip" ><!-- 能夠刪除 <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="22dip" android:contentDescription="@string/image" /> --> <TextView android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingTop="6dip" android:textSize="15sp"/> <TextView android:id="@+id/date" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/content" android:paddingRight="20dip"/></RelativeLayout>

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/list_items"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:divider="@color/white"        android:dividerHeight="1dip" >    </ListView></LinearLayout>

原始碼:http://download.csdn.net/detail/yangweixing10/7214057

android樣式布局---&gt;ListView(附上原始碼)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.