天天看點

上接系出名門Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView

5、ListView 的 Demo

main_list_adapter.xml

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

<!-- 

        自定義清單擴充卡的 layout 

--> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" android:layout_width="fill_parent" 

        android:layout_height="fill_parent"> 

        <TextView android:id="@+id/text" android:layout_width="wrap_content" 

                android:layout_height="wrap_content" android:textSize="16sp"> 

        </TextView> 

</LinearLayout>

MainListAdapter.java

package com.webabcd.view; 

import java.util.List; 

import android.content.Context; 

import android.view.LayoutInflater; 

import android.view.View; 

import android.view.ViewGroup; 

import android.widget.BaseAdapter; 

import android.widget.TextView; 

// 繼承 BaseAdapter 以實作自定義的清單擴充卡 

public class MainListAdapter extends BaseAdapter { 

        private LayoutInflater mInflater; 

        private List<String> mData; 

        public MainListAdapter(Context context, List<String> data) { 

                mInflater = LayoutInflater.from(context); 

                mData = data; 

        } 

        @Override 

        public int getCount() { 

                return mData.size(); 

        public Object getItem(int position) { 

                return mData.get(position); 

        public long getItemId(int position) { 

                return position; 

        public View getView(int position, View convertView, ViewGroup parent) { 

                TextView text; 

                if (convertView == null) { 

                        // 指定一個 layout 作為自定義清單擴充卡的 layout 

                        convertView = mInflater.inflate(R.layout.main_list_adapter, null); 

                        text = (TextView) convertView.findViewById(R.id.text); 

                        convertView.setTag(text); 

                } else { 

                        text = (TextView) convertView.getTag(); 

                } 

                String mItem = mData.get(position); 

                text.setText(mItem); 

                return convertView; 

}

Main.java

import java.util.ArrayList; 

import android.app.ListActivity; 

import android.content.Intent; 

import android.os.Bundle; 

import android.widget.ListView; 

// 此處要繼承 ListActivity ,用以實作 ListView 的功能 

public class Main extends ListActivity { 

        /** Called when the activity is first created. */ 

        public void onCreate(Bundle savedInstanceState) { 

                super.onCreate(savedInstanceState); 

                setTheme(android.R.style.Theme_Light); 

                setContentView(R.layout.main);                 

                mData = getData(); 

                // 使用自定義的清單擴充卡來展現資料 

                MainListAdapter adapter = new MainListAdapter(this, mData); 

                // 如需使用系統内置的清單擴充卡,則可以使用類似如下的方法 

                // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, mData); 

                this.setListAdapter(adapter); 

        // ListView 的資料源 

        private List<String> getData()        { 

                List<String> items = new ArrayList<String>(); 

                items.add("TextView"); 

                items.add("Button"); 

                items.add("ImageButton"); 

                items.add("ImageView"); 

                items.add("CheckBox"); 

                items.add("RadioButton"); 

                items.add("AnalogClock"); 

                items.add("DigitalClock"); 

                items.add("DatePicker"); 

                items.add("TimePicker"); 

                items.add("ToggleButton"); 

                items.add("EditText"); 

                items.add("ProgressBar"); 

                items.add("SeekBar"); 

                items.add("AutoCompleteTextView"); 

                items.add("MultiAutoCompleteTextView"); 

                items.add("ZoomControls"); 

                items.add("Include"); 

                items.add("VideoView"); 

                items.add("WebView"); 

                items.add("RatingBar"); 

                items.add("Tab"); 

                items.add("Spinner"); 

                items.add("Chronometer"); 

                items.add("ScrollView"); 

                items.add("TextSwitcher"); 

                items.add("ListView"); 

                items.add("Gallery"); 

                items.add("ImageSwitcher"); 

                items.add("GridView"); 

                items.add("ExpandableList"); 

                return items; 

        // ListView 中某項被選中後的邏輯 

        protected void onListItemClick(ListView l, View v, int position, long id) { 

                Intent intent = new Intent(); 

                intent.setClassName(this, "com.webabcd.view._" + mData.get(position)); 

                startActivityForResult(intent, 0); 

6、ExpandableList 的 Demo

_ExpandableList.java

import android.app.ExpandableListActivity; 

import android.view.ContextMenu; 

import android.view.Gravity; 

import android.view.MenuItem; 

import android.view.ContextMenu.ContextMenuInfo; 

import android.widget.AbsListView; 

import android.widget.BaseExpandableListAdapter; 

import android.widget.ExpandableListAdapter; 

import android.widget.ExpandableListView; 

import android.widget.Toast; 

import android.widget.ExpandableListView.ExpandableListContextMenuInfo; 

// ExpandableList - 可展開/收縮清單 

// 繼承 ExpandableListActivity 以實作清單的可展開/收縮的功能 

public class _ExpandableList extends ExpandableListActivity { 

        private ExpandableListAdapter mAdapter; 

        protected void onCreate(Bundle savedInstanceState) { 

                // TODO Auto-generated method stub 

                setTitle("ExpandableList"); 

                mAdapter = new MyExpandableListAdapter(); 

                setListAdapter(mAdapter); 

                registerForContextMenu(this.getExpandableListView()); 

        // 為清單的每一項建立上下文菜單(即長按後呼出的菜單)    

        public void onCreateContextMenu(ContextMenu menu, View v, 

                        ContextMenuInfo menuInfo) { 

                menu.setHeaderTitle("ContextMenu"); 

                menu.add(0, 0, 0, "ContextMenu"); 

        // 單擊上下文菜單後的邏輯 

        public boolean onContextItemSelected(MenuItem item) { 

                ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); 

                String title = ((TextView) info.targetView).getText().toString(); 

                int type = ExpandableListView.getPackedPositionType(info.packedPosition); 

                if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 

                        int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 

                        int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 

                        Toast.makeText(this, title + " - Group Index: " + groupPos + " Child Index: " + childPos, Toast.LENGTH_SHORT).show(); 

                        return true; 

                } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 

                        Toast.makeText(this, title + " - Group Index: " + groupPos, Toast.LENGTH_SHORT).show(); 

                return false; 

        public class MyExpandableListAdapter extends BaseExpandableListAdapter { 

                // 父清單資料 

                private String[] groups =    

                {    

                        "group1",    

                        "group2",    

                        "group3", 

                        "group4"    

                }; 

                // 子清單資料 

                private String[][] children =    

                { 

                        { "child1" }, 

                        { "child1", "child2" }, 

                        { "child1", "child2", "child3" }, 

                        { "child1", "child2", "child3", "child4" } 

                @Override 

                public Object getChild(int groupPosition, int childPosition) { 

                        return children[groupPosition][childPosition]; 

                public long getChildId(int groupPosition, int childPosition) { 

                        return childPosition; 

                public int getChildrenCount(int groupPosition) { 

                        return children[groupPosition].length; 

                // 取子清單中的某一項的 View 

                public View getChildView(int groupPosition, int childPosition, 

                                boolean isLastChild, View convertView, ViewGroup parent) { 

                        TextView textView = getGenericView(); 

                        textView.setText(getChild(groupPosition, childPosition).toString()); 

                        return textView; 

                public Object getGroup(int groupPosition) { 

                        return groups[groupPosition]; 

                public int getGroupCount() { 

                        return groups.length; 

                public long getGroupId(int groupPosition) { 

                        return groupPosition; 

                // 取父清單中的某一項的 View 

                public View getGroupView(int groupPosition, boolean isExpanded, 

                                View convertView, ViewGroup parent) { 

                        textView.setText(getGroup(groupPosition).toString()); 

                public boolean hasStableIds() { 

                public boolean isChildSelectable(int groupPosition, int childPosition) { 

                // 擷取某一項的 View 的邏輯 

                private TextView getGenericView() { 

                        AbsListView.LayoutParams lp = new AbsListView.LayoutParams( 

                                        ViewGroup.LayoutParams.FILL_PARENT, 48); 

                        TextView textView = new TextView(_ExpandableList.this); 

                        textView.setLayoutParams(lp); 

                        textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 

                        textView.setPadding(32, 0, 0, 0); 

OK

<a href="http://down.51cto.com/data/100088" target="_blank">[源碼下載下傳]</a>

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/342089,如需轉載請自行聯系原作者

繼續閱讀