android — listview 最佳化+複雜UI 《中航信android用戶端實戰 經驗》

來源:互聯網
上載者:User

list  view 在android UI 中起著很大的作用。 listview 要是書寫不好會極大影響程式的效能。

 

這裡有一個 項目實戰 listview 例子。 關鍵是ListView 複雜UI 的實現。

最終的效果如:

 

package com.test.list;import android.app.ListActivity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.ArrayList;import java.util.TreeSet;public class MultipleItemsList extends ListActivity {    private MyCustomAdapter mAdapter;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mAdapter = new MyCustomAdapter();        for (int i = 1; i < 50; i++) {            mAdapter.addItem("item " + i);            if (i % 4 == 0) {                mAdapter.addSeparatorItem("separator " + i);            }        }        setListAdapter(mAdapter);    }    private class MyCustomAdapter extends BaseAdapter {        private static final int TYPE_ITEM = 0;        private static final int TYPE_SEPARATOR = 1;        private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;        private ArrayList<String> mData = new ArrayList<String>();        private LayoutInflater mInflater;        private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>();        public MyCustomAdapter() {            mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);        }        public void addItem(final String item) {            mData.add(item);            notifyDataSetChanged();        }        public void addSeparatorItem(final String item) {            mData.add(item);            // save separator position            mSeparatorsSet.add(mData.size() - 1);            notifyDataSetChanged();        }        @Override        public int getItemViewType(int position) {            return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;        }        @Override        public int getViewTypeCount() {            return TYPE_MAX_COUNT;        }        @Override        public int getCount() {            return mData.size();        }        @Override        public String getItem(int position) {            return mData.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder = null;            int type = getItemViewType(position);            System.out.println("getView " + position + " " + convertView + " type = " + type);            if (convertView == null) {                holder = new ViewHolder();                switch (type) {                    case TYPE_ITEM:                        convertView = mInflater.inflate(R.layout.item1, null);                        holder.textView = (TextView)convertView.findViewById(R.id.text);                        break;                    case TYPE_SEPARATOR:                        convertView = mInflater.inflate(R.layout.item2, null);                        holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);                        break;                }                convertView.setTag(holder);            } else {                holder = (ViewHolder)convertView.getTag();            }            holder.textView.setText(mData.get(position));            return convertView;        }    }    public static class ViewHolder {        public TextView textView;    }}

 

兩個xml UI設定檔:

1: item1.xml

 

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="wrap_content"android:layout_width="fill_parent"><!-- android:gravity="center_vertical" --><TextViewandroid:id="@+id/text"android:layout_height="50dp"android:gravity="center"android:text="text"android:visibility="visible"android:layout_width="fill_parent"android:textColor="#FF000000"android:background="#FFFFFFFF" /></LinearLayout>

2: item2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="wrap_content"android:layout_width="fill_parent"><TextViewandroid:id="@+id/textSeparator"android:layout_height="wrap_content"android:gravity="center_vertical"android:text="text"android:visibility="visible"android:layout_width="fill_parent"android:textColor="#FFFFFFFF"android:background="#FFFF0000" /></LinearLayout>

原文地址:

http://android.amberfog.com/?p=296

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.