当前位置:  编程技术>移动开发
本页文章导读:
    ▪listView 第一个item取得焦点        listView 第一个item获得焦点 myList.setOnFocusChangeListener(new View.OnFocusChangeListener() {         public void onFocusChange(View v, boolean hasFocus) {             if (hasFocus) {                 myHandler.postAtFrontOfQ.........
    ▪ Listview中运用线程实现无限加载更多项目的功能        Listview中使用线程实现无限加载更多项目的功能   在现在的SINA微博或者象twitter,dzone等网站中,当加载一个很长的列表时,往往都是先加载部分内容,然后当用户用拖拉条往下拖动时,再加载更.........
    ▪ 自定义Title题目样式       自定义Title标题样式 我们在开发中,会对标题进行操作,全屏操作,改变标题样式等等。我们可以通过requestWindowFeature(featrueId)来实现,它的功能是启用窗体的扩展特性。参数是Window类中定义.........

[1]listView 第一个item取得焦点
    来源: 互联网  发布时间: 2014-02-18
listView 第一个item获得焦点

myList.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                myHandler.postAtFrontOfQueue(new Runnable() {
                    public void run() {
                        myList.setSelection(0);
                    }
                });
            }
        }
    });

private Handler myHandler = new Handler();

    
[2] Listview中运用线程实现无限加载更多项目的功能
    来源: 互联网  发布时间: 2014-02-18
Listview中使用线程实现无限加载更多项目的功能
  在现在的SINA微博或者象twitter,dzone等网站中,当加载一个很长的列表时,往往都是
先加载部分内容,然后当用户用拖拉条往下拖动时,再加载更多的内容.这里在android
中,可以用listview搭配线程实现同样的功能,举例如下:

1)首先设置footer部分,即在listview的下面设置footview,
footview的模版如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:gravity="center_horizontal"
    android:padding="3dp"
    android:layout_height="fill_parent">

    <TextView
        android:id="@id/android:empty"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:padding="5dp"
        android:text="Loading more days..."/>

</LinearLayout>

然后记得在加到adapter前,把footview加到listview中去
  View footerView = ((LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listfooter, null, false);

this.getListView().addFooterView(footerView);

this.setListAdapter(adapter);

然后,listview的onscroll方法如下:
this.getListView().setOnScrollListener(new OnScrollListener(){
			
				
			public void onScrollStateChanged(AbsListView view, int scrollState) {}
			
				
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				
				
								int lastInScreen = firstVisibleItem + visibleItemCount;				
				String last=Integer.toString(lastInScreen);
				Log.d("show",last);
				String total=Integer.toString(totalItemCount);
				Log.d("total",total);
							
if((lastInScreen == totalItemCount) && !(loadingMore)){					
					Thread thread =  new Thread(null, loadMoreListItems);
			        thread.start();
				}
			}
		});
		
		
			
Thread thread =  new Thread(null, loadMoreListItems);
        thread.start();

  下面来分析下,其中,可以预先设置一个屏的listview能显示多少条记录,比如设置为5条,
这里itemsPerPage=15,然后首先
int lastInScreen = firstVisibleItem + visibleItemCount;
  这里,获得每屏中最后一条数据的位置,比如一次先显示5条,则lastInScreen=5了,

if((lastInScreen == totalItemCount) && !(loadingMore)){
Thread thread =  new Thread(null, loadMoreListItems);
        thread.start();
}
  这里是判断,如果是滚动了滚动条,并且用户以及功能浏览完了一次屏幕所需要的数目(比如5个),则启用线程序loadMoreListItems去处理,加载另外的新的5个了.
而如果没滚动,则第一次显示时,也要启用线程序loadMoreListItems去处理.
.
  下面看loadMoreListItems.

  private Runnable loadMoreListItems = new Runnable() {			
	
		public void run() {
						loadingMore = true;
			
				    	myListItems = new ArrayList<String>();
	    	
			//Simulate a delay, delete this on a production environment!
	    	try { Thread.sleep(1000);
			} catch (InterruptedException e) {}
			
			//Get 15 new listitems
	    	for (int i = 0; i < itemsPerPage; i++) {		
				
 	myListItems.add("Date: " + (d.get(Calendar.MONTH)+ 1) + "/" + d.get(Calendar.DATE) + "/" + d.get(Calendar.YEAR) );          					        	d.add(Calendar.DATE, 1);
				
			}
			
				        runOnUiThread(returnRes);
	        
		}
	};	


  在这个线程里,实际上就是用循环往listview中加日期,产生从当天时间起的若干个日期格式,然后调用 runOnUiThread(returnRes);去更新UI主线程,注意 runOnUiThread是
android提供的方法,可以帮助你在线程中执行UI更新操作.

 private Runnable returnRes = new Runnable() {
     
        public void run() {
        	
						if(myListItems != null && myListItems.size() > 0){
                for(int i=0;i<myListItems.size();i++)
                	adapter.add(myListItems.get(i));
            }
        	
			       			
			            adapter.notifyDataSetChanged();
			
			            loadingMore = false;
        }
    };

  在更新主线程中,十分简单,只不过往adapter中去增加元素,并且notifyDataSetChanged通知listview起变化了,并设置loadingMore=false,因为已经加载完了一次了.

 

    
[3] 自定义Title题目样式
    来源: 互联网  发布时间: 2014-02-18
自定义Title标题样式

我们在开发中,会对标题进行操作,全屏操作,改变标题样式等等。我们可以通过requestWindowFeature(featrueId)来实现,它的功能是启用窗体的扩展特性。参数是Window类中定义的常量。

枚举常量

1.DEFAULT_FEATURES:系统默认状态,一般不需要指定

2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定

3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时

4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度

5.FEATURE_LEFT_ICON:标题栏左侧的图标

6.FEATURE_NO_TITLE:吴标题

7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。

8.FEATURE_PROGRESS:进度指示器功能

9.FEATURE_RIGHT_ICON:标题栏右侧的图标

自定义标题样式,这里用加载条来作例子:

Main.java

package com.action;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Window;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    	  setContentView(R.layout.main);
    	  getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, R.layout.progress);
    	  setProgressBarIndeterminateVisibility(true);
    	  new Thread(runnable).start();
    }
    private Runnable runnable = new Runnable(){

		@Override
		public void run() {
			Message msg = new Message();
			try {
				Thread.sleep(1500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			handler.sendMessage(msg);
			
		}
    	
    };
    Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			setProgressBarIndeterminateVisibility(false);
			super.handleMessage(msg);
		}
    	
    };
}

 progress.xml

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="wrap_content" android:layout_height="wrap_content">
	<ProgressBar android:id="@+id/progress"
		android:layout_width="wrap_content" android:layout_height="wrap_content"
		android:layout_gravity="center_vertical" >
	</ProgressBar>
</LinearLayout>

 

 

全屏操作:

package com.action;

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    	  setContentView(R.layout.main);
    	  setProgressBarIndeterminateVisibility(true);
    }
}

 

 

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3