上接系出名门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 ,如需转载请自行联系原作者

相关文章
|
3月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
109 0
|
2月前
|
XML 前端开发 Android开发
Android:UI:Drawable:View/ImageView与Drawable
通过本文的介绍,我们详细探讨了Android中Drawable、View和ImageView的使用方法及其相互关系。Drawable作为图像和图形的抽象表示,提供了丰富的子类和自定义能力,使得开发者能够灵活地实现各种UI效果。View和ImageView则通过使用Drawable实现了各种图像和图形的显示需求。希望本文能为您在Android开发中使用Drawable提供有价值的参考和指导。
45 2
|
2月前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
44 5
|
3月前
|
缓存 数据处理 Android开发
在 Android 中使用 RxJava 更新 View
【10月更文挑战第20天】使用 RxJava 来更新 View 可以提供更优雅、更高效的解决方案。通过合理地运用操作符和订阅机制,我们能够轻松地处理异步数据并在主线程中进行 View 的更新。在实际应用中,需要根据具体情况进行灵活运用,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在 Android 中使用 RxJava 更新 View 的技巧和方法,为开发高质量的 Android 应用提供有力支持。
|
3月前
|
缓存 调度 Android开发
Android 在子线程更新 View
【10月更文挑战第21天】在 Android 开发中,虽然不能直接在子线程更新 View,但通过使用 Handler、AsyncTask 或 RxJava 等方法,可以实现子线程操作并在主线程更新 View 的目的。在实际应用中,需要根据具体情况选择合适的方法,并注意相关的注意事项和性能优化,以确保应用的稳定性和流畅性。可以通过不断的实践和探索,进一步掌握在子线程更新 View 的技巧和方法,为开发高质量的 Android 应用提供支持。
44 2
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
|
3月前
|
XML 前端开发 Android开发
Android面试高频知识点(3) 详解Android View的绘制流程
Android面试高频知识点(3) 详解Android View的绘制流程
29 2
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
27天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
53 19
|
27天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
56 14