`
yxwang0615
  • 浏览: 560991 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

使用ViewSwitcher实现ListView的数据动态加载[学习]

 
阅读更多

 

ViewSwitcher

译者署名: ivanlee

版本:Android 2.3 r1

 

结构

继承关系

public class ViewSwitcher extends ViewAnimator

 

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.FrameLayout

android.widget.ViewAnimator

android.widget.ViewSwitcher

 

已知直接子类 ImageSwitcher, TextSwitcher

 

类概述

在两个视图间转换时显示动画,有一个可以创建这些视图的工厂类。你可以用工厂来创建这些视图,也可以自己创建。一个ViewSwitcher只允许包含两个子视图,且一次仅能显示一个。 (译者注:与ViewFlipper类相似,但该类不常用,常用其两个子类ImageSwitcher:转换图片时增加动画效果; TextSwitcher: 转换文字时增加动画效果; 其实例见apidemos中ImageSwitcher实例和TextSwitcher实例)

 

内部类 interface ViewSwitcher.ViewFactory

在一个ViewSwitcher里创建视图

 

构造函数

public ViewSwitcher (Context context)

构造一个新的空的视图转换器(ViewSwitcher)。

参数

context 应用环境(译者注:应用程序上下文)

 

public ViewSwitcher (Context context, AttributeSet attrs)

构造一个指定上下文、属性集合的空的视图转换器(ViewSwitcher)。

参数

context 应用环境(译者注:应用程序上下文)

attrs 属性集合

 

公共方法

public void addView(View child, int index, ViewGroup.LayoutParams params)

添加一个指定布局参数的子视图

参数

child 添加的子视图

index 添加的子视图的索引

params 子视图的布局参数

异常

IllegalStateException 如果切换器中已经包含了两个视图时。

 

public View getNextView ()

返回下一个要显示的视图

返回

视图切换之后将要显示出的下一个视图

 

public void reset ()

重置视图转换器(ViewSwitcher)来隐藏所有存在的视图,并使转换器达到一次动画都还没有播放的状态。

 

public void setFactory (ViewSwitcher.ViewFactory factory)

设置用来生成将在视图转换器中切换的两个视图的工厂。也可以调用两次 addView(android.view.View, int, android.view.ViewGroup.LayoutParams)来替代使用工厂的方法。

参数

factory 用来生成转换器内容的视图工厂

 

 

实现ListView的数据动态加载DEMO:

效果图:模拟点击LoadMoreItems按钮或得更多数据。

 

代码:

load_more_items.xml:

 

 

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/btn_loadmorecontacts"
    android:text="Load More Items"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textColor="#FFFFFF" 
    android:background="@android:drawable/list_selector_background" 
    android:clickable="true" 
    android:onClick="onClick" />
 

progress_bar.xml:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:gravity="center_horizontal" 
    android:minHeight="?android:attr/listPreferredItemHeight">

    <ProgressBar 
        android:id="@+id/progressbar"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerVertical="true" />

    <TextView 
        android:text="Loading…" 
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content"
        android:layout_toRightOf="@+id/progressbar" 
        android:layout_centerVertical="true" 
        android:gravity="center"
        android:padding="10dip"
        android:textColor="#FFFFFF" />
</RelativeLayout>

 

 ViewSwitcherExample.java:

 

 

/**
 * ViewSwitcher 字面意思理解为视图转换开关.
 * 在两个视图间转换时显示动画,有一个可以创建这些视图的工厂类。你可以用工厂来创建这些视图,也可以自己创建。
 * 一个ViewSwitcher只允许包含两个子视图,且一次仅能显示一个。 
 */
public class ViewSwitcherExample extends ListActivity implements OnClickListener {
	
	static final String[] ITEMS = new String[]{
		"List Item 1", "List Item 2",
		"List Item 3", "List Item 4",
		"List Item 5", "List Item 6",
		"List Item 7", "List Item 8",
		"List Item 9", "List Item 10"};

	private static final String TAG = "ViewSwitcherExample";
	
	private ViewSwitcher switcher;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// no window title
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		//create the ViewSwitcher in the current context
		switcher = new ViewSwitcher(this);
		//footer Button: see XML1
		View footer = View.inflate(this, R.layout.load_more_items, null);
		//progress View: see XML2
		View processBar = View.inflate(this, R.layout.progress_bar, null);
		//add the views (first added will show first)
		 switcher.addView(footer);
		 switcher.addView(processBar);
		//add the ViewSwitcher to the footer
		 getListView().addFooterView(switcher);
		//add items to the ListView
		 setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ITEMS));
		
	}
	
	@Override
	public void onClick(View v) {
		//first view is showing, show the second progress view
		switcher.showNext();  //显示下一个视图
		//and start background work
		new getMoreItems().execute();
		Log.i(TAG, Thread.currentThread().getName());
	}
	
	
	/** Background Task To Get More Items**/
	private class getMoreItems extends AsyncTask{

		@Override
		protected Object doInBackground(Object... params) {
			//code to add more items
			try {
				Thread.sleep(3000); //only to demonstrate
				Log.i(TAG, Thread.currentThread().getName());
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			return null;
		}
		
		@Override
		protected void onPostExecute(Object result) {
			//返回上一个视图
			switcher.showPrevious(); 
			//update the ListView
		}
		
	}
	
}

 

 

分享到:
评论

相关推荐

    布局的动态加载

    - 动态加载的时机:避免在主线程中进行耗时的布局加载操作,可以使用异步加载或者在初始化阶段就预先加载好布局。 - 缓存布局:对于重复使用的布局,可以考虑缓存已加载的`View`,避免频繁的解析XML。 总结,动态...

    android listview 自动往上滚动

    确保Adapter正确地更新数据,并通知ListView数据集已改变,这是保证滚动效果的基础。 9. **性能优化**:在处理自动滚动时,需要注意性能问题,避免不必要的计算和内存泄漏。合理使用ViewHolder模式,以及在滚动时...

    Android应用源码之listview 的各种动画效果-IT计算机-毕业设计.zip

    在Android应用开发中,ListView是常用的控件之一,它用于展示大量的列表数据。...开发者可以通过分析和学习,进一步掌握Android UI动态效果的实现技巧,并将其应用于自己的毕业设计或移动应用项目中。

    自定义ListView以及图片的左右切换

    `ImageSwitcher`是Android提供的一个视图切换器,它继承自`ViewSwitcher`,主要用于在两个`View`之间进行切换,通常用于实现类似轮播图的效果。在这个demo中,`ImageSwitcher`被用来展示图片,并且支持左右滑动来...

    实现listview实现用户操作交互

    - 对于复杂的ListView交互,编写单元测试以确保手势识别和数据加载的正确性是很重要的。 - 使用 Espresso 或者 Robolectric 进行UI自动化测试。 10. **性能优化**: - 使用`ListView.setChoiceMode()`可以启用...

    Android ListView动画

    这是通过ViewAnimator实现的,当数据集发生改变时,ListView会自动应用这些动画。然而,这些基本动画可能无法满足开发者对更复杂交互的需求。 二、自定义动画 1. **AnimationUtils.loadAnimation()** 要自定义...

    Android应用源码之Gallery+ImageSwitcher+ViewFlipper实现手机查看壁纸效果_壁纸.zip

    总结来说,这个源码示例提供了如何使用Android的Gallery、ImageSwitcher和ViewFlipper组件创建一个简单的壁纸查看应用的实例,是学习Android UI组件和图片加载优化的一个良好起点。通过深入理解并实践这些组件,...

    Imageswitcher和Gallery实现同步

    综上所述,`Imageswitcher` 和 `Gallery` 的同步实现涉及到数据绑定、事件监听、图片加载、自动播放和动画设置等多个环节。通过合理的组合和定制,可以创建出具有专业级用户体验的图片浏览组件。在实际开发中,还...

    应用源码之ViewFlowTest.zip

    总之,通过学习和分析ViewFlowTest的源码,开发者不仅可以掌握ViewFlow的使用,还能对Android的视图管理、手势识别、动画实现等有更深入的理解。这将有助于提升Android应用的UI设计和性能优化能力,对毕业设计和代码...

    2019Android面试 常见58题.zip

    - 插件化:实现动态加载功能,如热更新。 10. **Android Jetpack**: - Room:了解Room数据库库,作为SQLite的高级封装,简化数据库操作。 - LiveData和ViewModel:理解这两者在MVVM架构中的作用,如何实现数据...

    Gallery和imageSwitcher循环显示切换图像组件

    通过设置适配器(Adapter),`Gallery`可以动态加载数据,并让用户通过左右滑动来浏览。在实现图片循环显示时,我们可以将图片资源或网络图片URL存储在数据集中,然后在适配器的`getView()`方法中加载图片。`Gallery...

    Android 划屏

    9. **数据加载与刷新**: 聊天应用通常需要实时加载和刷新数据,这可以通过`SwipeRefreshLayout`实现下拉刷新,同时结合`RecyclerView`或`ListView`展示聊天记录,利用`Adapter`进行数据绑定。 10. **性能优化**:...

    AdapterViewFilpper

    这个组件是AdapterView家族的一部分,比如ListView、GridView等,它允许开发者动态地添加、删除或切换子视图,同时提供了一个内置的动画机制来实现过渡效果。 在Android应用设计中,AdapterViewFlipper常用于创建...

    Android典型技术模块开发详解

    10.6.3 使用ContentResolver操作ContentProvider中的数据 10.7 本章小结 第11章 网络通信 11.1 TCP协议 11.1.1 服务端的创建 11.1.2 客户端创建 11.2 UDP协议 11.2.1 服务端的创建 11.2.2 客户端创建 11.3 ...

    三,android编码规范 & 常用布局 & 常用控件

    6. **列表视图(ListView)**和网格视图(GridView):展示大量可滚动的数据项。 7. **滑动选择器(SeekBar)**:让用户调整数值。 8. **日期/时间选择器(DatePicker/TimePicker)**:方便用户选择日期或时间。 9. ...

    Android2.2 API中文文档——View

    在Android开发中,`View`是最基本的UI组件,所有可见的用户界面元素都是通过继承`View`类实现的。`View`类定义了控件的行为和外观,并且提供了绘制、布局、处理触摸事件等功能。本文档将详细介绍Android2.2版本中的`...

Global site tag (gtag.js) - Google Analytics