如果Activity有繼承ListActivity
是不可以使用
setContentView(R.layout.list);
這個函式(會出錯)
被網路上一些文章誤導 =.=
列表(ListView)的應用上,很少是簡簡單單而已xd,很多都是要加東加西,又是加圖片
又是加標題、加內容的,所以事情很常不是我們想的那麼簡單的xd,這時就一定要用到
自定義這個東西,自定義顧名思義就是隨便您定,只要您高興、您開心,愛怎麼定都可以
方便是很方便,不過相對的會比較複雜一些,既然會需要用到,那我們就來看看怎麼做吧!
首先想要自定義的都需要多一個模板,所以新增一個List.xml
adapter.xml
- version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android" - android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- android:id="@+id/MyAdapter_ImageView_icon"
- android:layout_width="110dp"
- android:layout_height="70dp"
- android:layout_centerVertical="true"
- android:layout_marginLeft="5dp"
- />
android:orientation="vertical" - android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- android:id="@+id/MyAdapter_TextView_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:textColor="#ffbf00" />
- android:id="@+id/MyAdapter_TextView_info"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="15dp"
- android:textColor="#FFFFFFFF" />
新增一個適配器,也是資料的橋接器MyAdapter,說明資料應該對應到模板的哪個位置
MyAdapter.java
MyAdapter.java
- package jim.demo.listview;
- import android.content.Context;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.TextView;
- public class MyAdapter extends BaseAdapter {
- private LayoutInflater myInflater;
- CharSequence[] title = null;
- CharSequence[] info = null;
- public MyAdapter(Context ctxt, CharSequence[] title, CharSequence[] info){
- myInflater = LayoutInflater.from(ctxt);
- this.title = title;
- this.info = info;
- }
- @Override
- public int getCount() {
- return title.length;
- }
- @Override
- public Object getItem(int position) {
- return title[position];
- }
- @Override
- public long getItemId(int position) {
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- //自訂類別,表達個別listItem中的view物件集合。
- ViewTag viewTag;
- if(convertView == null){
- //取得listItem容器 view
- convertView = myInflater.inflate(R.layout.adapter, null);
- //建構listItem內容view
- viewTag = new ViewTag(
- (ImageView)convertView.findViewById(R.id.MyAdapter_ImageView_icon),
- (TextView) convertView.findViewById(R.id.MyAdapter_TextView_title),
- (TextView) convertView.findViewById(R.id.MyAdapter_TextView_info)
- );
- //設置容器內容
- convertView.setTag(viewTag);
- }
- else{
- viewTag = (ViewTag) convertView.getTag();
- }
- //設定內容圖案
- switch(position){
- case 0:
- viewTag.icon.setBackgroundResource(R.drawable.taipei);
- break;
- case 1:
- viewTag.icon.setBackgroundResource(R.drawable.taichung);
- break;
- case 2:
- viewTag.icon.setBackgroundResource(R.drawable.kaohsiung);
- break;
- }
- //設定標題文字
- viewTag.title.setText(title[position]);
- //設定內容文字
- viewTag.info.setText(info[position]);
- return convertView;
- }
- //自訂類別,表達個別listItem中的view物件集合。
- class ViewTag{
- ImageView icon;
- TextView title;
- TextView info;
- public ViewTag(ImageView icon, TextView title, TextView info){
- this.icon = icon;
- this.title = title;
- this.info = info;
- }
- }
- }
新增一個適配器,也是資料的橋接器MyAdapter,說明資料應該對應到模板的哪個位置
MyAdapter.java
MyAdapter.java
- package jim.demo.listview;
- import android.app.ListActivity;
- import android.os.Bundle;
- public class DemoListViewActivity extends ListActivity {
- private String[] mtitle = new String[]{"台北","台中","高雄"} ;
- private String[] minfo = new String[]{"台北101.故公博物院.中正記念堂","都會公園.高美濕地.大坑風景區","西子灣.英國領事館.愛河"};
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- //標題資料
- CharSequence[] Mtitle = mtitle;
- //內容
- CharSequence[] Minfo = minfo;
- //載入列表中,new出MyAdapter時帶入所需"標題"."內容"資料
- setListAdapter(new MyAdapter(this, Mtitle, Minfo));
- }
- }
執行後畫面


後記:
自定義ListView的重點在於adapter.xml這個模板及MyAdapter.java這個適配器
只要修改模板及適配器就能做出自己想要的列表形式,這個對剛接觸android程式設計
的人來說可能會有點不太習慣這樣的設計模式,但android很多地方都是這種設計模式的
只要是自定義的地方,大多都會是此種形式,就為你介紹到此,謝謝。
只要修改模板及適配器就能做出自己想要的列表形式,這個對剛接觸android程式設計
的人來說可能會有點不太習慣這樣的設計模式,但android很多地方都是這種設計模式的
只要是自定義的地方,大多都會是此種形式,就為你介紹到此,謝謝。
No comments:
Post a Comment