[转载]android listView取消高亮显示和内容刷新
2014-09-06 21:52阅读:
android listView取消点击时的黄色高亮效果
listView里的item在点击的时候会变成黄色高亮显示,这时可以在listview里添加
android:listSelector='@android:color/transparent'来取消黄色高亮效果.
我一开始以为 android:listSelector='@null'也可以达到同样的目的,发现不行,因为
AbsListView类里有如下方法
protected void onMeasure(int
widthMeasureSpec, int heightMeasureSpec) {
if
(mSelector == null) {
useDefaultSelector();
}
final Rect
listPadding = mListPadding;
listPadding.left = mSelectionLeftPadding + mPaddingLeft;
listPadding.top = mSelectionTopPadding + mPaddingTop;
listPadding.right = mSelectio
nRightPadding + mPaddingRight;
listPadding.bottom = mSelectionBottomPadding +
mPaddingBottom;
}
如果用
android:listSelector='@null',那么会使用默认的selector
Android中的ListView内容刷新问题
最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来。在网上查了很多帖子,很
多人在问,也很多人在解答,但是总的来说都没找到详细的解决方案。对于ListView与数据库的同步,高手们建议使用
ContentProvider对象。但是如果我不使用数据库呢?也有人回答用notifyDataSetChanged()方法。这倒是一个正确的解决
方案,但是对于新手来说,还是比较困惑怎么去用,这里我贴一下我的用法:
Java代码
OnClickListener listener2
= new
OnClickListener() {
@Override
public
void
onClick(View v) {
//
TODO Auto-generated
method stub
MapObject> m =
new
HashMapObject>();
String
tiString =
tv.getText().toString(); //
注意这里我为什么要取出这个EditText的内容
m.put('prod_na',
tiString); //
而不这样写 m.put('prod_na',
tv.getText());
m.put('prod_type',
tiString); //
因为tv.getText()返回的是Editable对象,真正的数据是被缓存的,
//
也就是说你后续的EditText改动都会影响之前添加的Item
coll.add(m);
//
取回Adapter对象,用于调用notifyDataSetChanged方法。
SimpleAdapter sAdapter =
(SimpleAdapter)lv.getAdapter();
sAdapter.notifyDataSetChanged();
}
};
这里涉及到了Android中的MVC模式概念,如何存储数据,控制和显示。
你可以认为ListView是一个View,那么mode是什么呢?显然是SimpleAdapter对象,而Control又是什么呢?那只能是
notifyDataSetChanged()了。当数据变化时,也就是SimpleAdapter所处理的数据变化了,那么我们就需要调用
notifyDataSetChanged 去通知View作出改变。
记录和恢复ListView滚动的位置
有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码:
Java代码
//列表滚动
private OnScrollListener
ScrollLis =
new
OnScrollListener() {
@Override
public
void
onScroll(AbsListView arg0,
int arg1,
int arg2,
int arg3)
{
}
@Override
public
void
onScrollStateChanged(AbsListView
view, int
scrollState) {
if(scrollState==OnScrollListener.SCROLL_STATE_IDLE){
ListPos=list.getFirstVisiblePosition();
//ListPos记录当前可见的List顶端的一行的位置
}
}
};
接下来就是还原位置,放在ListView加载之后:
Java代码
list.setSelection(ListPos);