Android-listview optimization + complex UI: practical experience of the android client of travelsky

Source: Internet
Author: User

List View plays a major role in the android UI. If listview is not properly written, the program performance will be greatly affected.

 

Here is an example of a project listview. The key is the implementation of the complex UI of listview.

The final effect is as follows:

 

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;    }}

 

Two xml ui configuration files:

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>

Original article address:

Http://android.amberfog.com /? P = 296

 

 

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.