当前位置: 编程技术>移动开发
本页文章导读:
▪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方法如下:
下面来分析下,其中,可以预先设置一个屏的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.
在这个线程里,实际上就是用循环往listview中加日期,产生从当天时间起的若干个日期格式,然后调用 runOnUiThread(returnRes);去更新UI主线程,注意 runOnUiThread是
android提供的方法,可以帮助你在线程中执行UI更新操作.
在更新主线程中,十分简单,只不过往adapter中去增加元素,并且notifyDataSetChanged通知listview起变化了,并设置loadingMore=false,因为已经加载完了一次了.
在现在的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); } }
最新技术文章: