上接系出名门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(); 
        } 

        @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<String> 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<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 中某项被选中后的逻辑 
        @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; 
                } 
        } 
}
 
 
 

     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/342089 ,如需转载请自行联系原作者

相关文章
|
4天前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
17 2
|
1天前
|
Android开发
Android自定义View之正方形
【6月更文挑战第23天】
|
2天前
|
XML Android开发 数据格式
Android基础控件介绍
Android基础控件介绍
5 0
|
9天前
|
开发工具 Android开发
Android 代码自定义drawble文件实现View圆角背景
Android 代码自定义drawble文件实现View圆角背景
15 0
|
9天前
|
Android开发
Android 自定义View 测量控件宽高、自定义viewgroup测量
Android 自定义View 测量控件宽高、自定义viewgroup测量
12 0
|
9天前
|
开发工具 Android开发 git
Android自定义View——可以设置最大宽高的FrameLayout
Android自定义View——可以设置最大宽高的FrameLayout
21 0
|
2月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
14 2
|
Android开发
Android自定义ListView和GridView解决滑动冲突和显示不全
Android自定义ListView和GridView解决滑动冲突和显示不全
149 0
|
Android开发
Android项目实战(十五):自定义不可滑动的ListView和GridView
原文:Android项目实战(十五):自定义不可滑动的ListView和GridView 不可滑动的ListView (RecyclweView类似) public class NoScrollListView extends ListView { public NoScrollLi...
945 0