5、ListView 的 Demo
main_list_adapter.xml
<? xml version ="1.0" encoding ="utf-8" ?>

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

         public MainListAdapter(Context context, List data) {
                mInflater = LayoutInflater.from(context);
                mData = data;
        }

        @Override
         public int getCount() {
                 return mData.size();
        }

        @Override
         public Object 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) {

                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 package com.webabcd.view;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;

// 此处要继承 ListActivity ,用以实现 ListView 的功能
public class Main extends ListActivity {
        
         private List mData;
        
         /** Called when the activity is first created. */
        @Override
         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 adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, mData);
                
                 this.setListAdapter(adapter);
        }

         // ListView 的数据源
         private List getData()        {
                List items = new ArrayList();
                
                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 中某项被选中后的逻辑
        @Override
         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
package com.webabcd.view;

import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;

// ExpandableList - 可展开/收缩列表
// 继承 ExpandableListActivity 以实现列表的可展开/收缩的功能
public class _ExpandableList extends ExpandableListActivity {
        
         private ExpandableListAdapter mAdapter;

        @Override
         protected void onCreate(Bundle savedInstanceState) {
                 // TODO Auto-generated method stub
                 super.onCreate(savedInstanceState);

                setTitle( "ExpandableList");
                
                mAdapter = new MyExpandableListAdapter();
                setListAdapter(mAdapter);
                registerForContextMenu( this.getExpandableListView());
        }

         // 为列表的每一项创建上下文菜单(即长按后呼出的菜单)    
        @Override
         public void onCreateContextMenu(ContextMenu menu, View v,
                        ContextMenuInfo menuInfo) {
                menu.setHeaderTitle( "ContextMenu");
                menu.add(0, 0, 0, "ContextMenu");
        }

         // 单击上下文菜单后的逻辑
        @Override
         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) {
                         int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
                        Toast.makeText( this, title + " - Group Index: " + groupPos, Toast.LENGTH_SHORT).show();
                        
                         return true;
                }

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

                @Override
                 public long getChildId( int groupPosition, int childPosition) {
                         return childPosition;
                }

                @Override
                 public int getChildrenCount( int groupPosition) {
                         return children[groupPosition].length;
                }

                 // 取子列表中的某一项的 View
                @Override
                 public View getChildView( int groupPosition, int childPosition,
                                 boolean isLastChild, View convertView, ViewGroup parent) {
                        TextView textView = getGenericView();
                        textView.setText(getChild(groupPosition, childPosition).toString());
                         return textView;
                }

                @Override
                 public Object getGroup( int groupPosition) {
                         return groups[groupPosition];
                }

                @Override
                 public int getGroupCount() {
                         return groups.length;
                }

                @Override
                 public long getGroupId( int groupPosition) {
                         return groupPosition;
                }

                 // 取父列表中的某一项的 View
                @Override
                 public View getGroupView( int groupPosition, boolean isExpanded,
                                View convertView, ViewGroup parent) {
                        TextView textView = getGenericView();
                        textView.setText(getGroup(groupPosition).toString());
                         return textView;
                }

                @Override
                 public boolean hasStableIds() {
                         return true;
                }

                @Override
                 public boolean isChildSelectable( int groupPosition, int childPosition) {
                         return true;
                }
                                
                 // 获取某一项的 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);
                         return textView;
                }
        }
}    
OK
[×××]  

更多相关文章

  1. Android之列表对话框
  2. Android文件列表RecyclerView中点击视频播放
  3. Android(安卓)继承SQLiteOpenHelper自定义DBHelper存取数据与图
  4. Android(安卓): 继承BaseAdapter对ListView进行填充
  5. Android(安卓)抽屉式
  6. Android(安卓)创建全局变量和Context
  7. android攻略
  8. android api 中文 (73)—— AdapterView
  9. 第十周智能手机开发学习笔记

随机推荐

  1. ES6 Proxy 性能之我见
  2. 使用canvas判断用户是否安装字体
  3. 如何在TypeScript中的window上显式设置新
  4. 什么是泳道
  5. 怎么评价欧盟统一充电接口?
  6. Web Worker 的内部构造以及 5 种你应当使
  7. SQLite的13个使用场景
  8. vite 构建,页面打开空白如何解决
  9. 正向代理与反向代理的区别
  10. WebAssembly 实践:如何写代码