android listview源码,Android中动态更新ListView【附源码】

在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中。

实现步骤:调用ListView的setOnScrollListener()方法设置滑动监听器,实现OnScrollListener接口的方法,判断当列表滑动到最低端时,加载新的列表项。

其中OnScrollListener接口需要实现如下两个方法:

onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)

view 报告滑动状态的视图

firstVisibleItem 可视的第一个列表项的索引

visibleItemCount 可视的列表项个数

totalItemCount 总共的列表项个数

onScrollStateChanged(AbsListView view, int scrollState)

view 报告滑动状态的视图

scrollState 滑动状态

滑动状态包括

SCROLL_STATE_IDLE : 0 视图没有滑动

SCROLL_STATE_TOUCH_SCROLL : 1 用户正在触摸滑动,手指仍在屏幕上

SCROLL_STATE_FLING : 2 用户之前触摸滑动,现在正在滑行,直到停止

下面通过代码给大家演示效果

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@id/android:list"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:drawSelectorOnTop="false"

/>

// footer.xml

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:orientation="horizontal"

>

android:id="@+id/progressbar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

style="\?android:attr/progressBarStyleSmall"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="20.0sp"

android:text="正在加载..."

/>

然后是主代码:

publicclassMainActivityextendsListActivity

{

privateListView mListView;

privateCustomAdapter mAdapter;

privateintmScrollState;

privateView mFooter;

@Override

publicvoidonCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//获取ListView

mListView = getListView();

//根据footer.xml描述创建View

mFooter = getLayoutInflater().inflate(R.layout.footer,null);

// 在ListView底部添加正在加载视图

//注意:addFooterView方法需要在调用setListAdapter方法前调用!

mListView.addFooterView(mFooter);

mAdapter =newCustomAdapter();

setListAdapter(mAdapter);

//给ListView添加滚动监听器

mListView.setOnScrollListener(newAbsListView.OnScrollListener()

{

@Override

publicvoidonScrollStateChanged(AbsListView view,intscrollState)

{

//记录当前状态

mScrollState = scrollState;

}

@Override

publicvoidonScroll(AbsListView view,intfirstVisibleItem,intvisibleItemCount,inttotalItemCount)

{

// 可视的最后一个列表项的索引

intlastVisibleItem = firstVisibleItem + visibleItemCount -1;

//当列表正处于滑动状态且滑动到列表底部时,执行

if(mScrollState != AbsListView.OnScrollListener.SCROLL_STATE_IDLE

&& lastVisibleItem == totalItemCount -1)

{

// 执行线程,模拟睡眠5秒钟后添加10个列表项

newThread()

{

privateHandler handler =newHandler()

{

@Override

publicvoidhandleMessage(Message msg)

{

super.handleMessage(msg);

//增加Item数量

mAdapter.count +=10;

//通知数据集变化

mAdapter.notifyDataSetChanged();

}

};

@Override

publicvoidrun()

{

super.run();

try

{

sleep(5000);

handler.sendEmptyMessage(0);

}catch(InterruptedException e)

{

e.printStackTrace();

}

}

}.start();

}

}

});

}

privateclassCustomAdapterextendsBaseAdapter

{

// 初始列表项数量

intcount =20;

@Override

publicintgetCount()

{

returncount;

}

@Override

publicObject getItem(intposition)

{

returnposition;

}

@Override

publiclonggetItemId(intposition)

{

returnposition;

}

@Override

publicView getView(intposition, View convertView, ViewGroup parent)

{

TextView result = (TextView) convertView;

//动态创建TextView添加早ListView中

if(result ==null)

{

result =newTextView(MainActivity.this);

result.setTextAppearance(MainActivity.this, android.R.style.TextAppearance_Large);

AbsListView.LayoutParams layoutParams =newAbsListView.LayoutParams

(AbsListView.LayoutParams.FILL_PARENT,

AbsListView.LayoutParams.WRAP_CONTENT);

result.setLayoutParams(layoutParams);

result.setGravity(Gravity.CENTER);

}

result.setText("第 "+ (position +1)+"行");

returnresult;

}

}

}

效果预览:

71eab525a956df35442cfa020f1eaef4.png

Android中动态更新ListView源码下载

具体下载目录在 /2012年资料/8月/4日/Android中动态更新ListView【附源码】/0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值