notifydatasetinvalidated的简单介绍
android满足条件弹出 popupwindow
准备:Listview list int listPost 自定义Adapter adapter1.记录当前list位置listPost=listv.getFirstVisiblePosition();2.获取数据给adapter3.列表清空list.clear();4.列表重新加载数据 list.setAdapter(adapter);5.还原位置listview.setSelection(listPost);----------------------------------------------------------------------其实啊 尼玛为什么要刷新list,你刷新adapter不就行了,自带方法:adapter.notifyDataSetInvalidated();
仿饿了吗点餐界面两个ListView联动效果
1.点击左侧的ListView,通过在在适配器中设置Item来改变颜色,再通过notifyDataSetInvalidated来刷新并用lv_home.setSelection(showTitle.get(arg2));来关联右侧的
2.右侧的主要是重写下onScroll的方法;来改变左侧ListView的颜色及背景
不过程序中还有个问题,望大神解答就是我右侧的ListView下拉时,上面的TextView能改变;但是上拉时,TextView的不能及时改变应为滑动时我只拿了firstVisibleItem来判断的
android simpleadapter可以重新填充吗?如何清除?
simpleadapter 传入的参数是List 对象,List对象当然可以重新填充,清除。
notifyDataSetInvalidated和notifyDataSetChanged的区别
notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别? (转载) notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来...
notifyDataSetInvalidated和notifyDataSetChanged有什么区别
notifyDataSetChanged方法通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容。
public void notifyDataSetChanged ()
该方法内部实现了在每个观察者上面调用onChanged事件。每当发现数据集有改变的情况,或者读取到数据的新状态时,就会调用此方法。
public void notifyDataSetInvalidated ()
该方法内部实现了在每个观察者上面调用onInvalidated事件。每当发现数据集监控有改变的情况,比如该数据集不再有效,就会调用此方法。
notifyDataSetInvalidated(),会重绘控件(还原到初始状态)
notifyDataSetChanged(),重绘当前可见区域
小白求教AutoComplete对自定义的ListView和重写的ArrayAdapter过滤
可以通过过滤器来实现,也就是自定义匹配规则的过滤器即CityArrayFilter。程序清单如下:
/**
* pAn array filter constrains the content of the array adapter with
* a prefix. Each item that does not start with the supplied prefix
* is removed from the list./p
*/
private class CityArrayFilter extends Filter {
/**
* The method is called when receive softkeybord entry's char
*/
@Override
protected FilterResults performFiltering(CharSequence prefix) {
if(Log.DEBUG.get()) {
Log.i(tag, "CityArrayFilter : performFiltering prefix = "+prefix);
}
FilterResults results = new FilterResults();
if (mOriginalValues == null) {
synchronized (mLock) {
mOriginalValues = new ArrayListT(mObjects);
}
}
if (prefix == null || prefix.length() == 0) {
synchronized (mLock) {
ArrayListT list = new ArrayListT(mOriginalValues);
results.values = list;
results.count = list.size();
}
} else {
String prefixString = prefix.toString().toLowerCase();
final ArrayListT values = mOriginalValues;
final int count = values.size();
final ArrayListT newValues = new ArrayListT(count);
final Enumeration enumeration = ChooseCityActivity.ht.keys();
String key;
String[] keyPart;
while(enumeration.hasMoreElements()) {
key = (String)enumeration.nextElement();
keyPart = key.split("-");
Log.i(tag, " prefixString = "+prefixString+" key = "+key);
if(prefixString.length() == 1 keyPart[1].startsWith(prefixString)) {
newValues.add((T)ChooseCityActivity.ht.get(key));
} else if (prefixString.length() == 2) {
if(keyPart[2].equals(prefixString)) {
newValues.add((T)ChooseCityActivity.ht.get(key));
}
if(newValues.size() == 0 keyPart[1].startsWith(prefixString)) {
newValues.add((T)ChooseCityActivity.ht.get(key));
}
} else if (prefixString.length() == 3) {
if(keyPart[0].equals(prefixString)) {
newValues.add((T)ChooseCityActivity.ht.get(key));
}
if(newValues.size() == 0 keyPart[1].startsWith(prefixString)) {
newValues.add((T)ChooseCityActivity.ht.get(key));
}
}
}
/*for (int i = 0; i count; i++) {
final T value = values.get(i);
final String valueText = value.toString().toLowerCase();
// First match against the whole, non-splitted value
if (valueText.startsWith(prefixString)) {
newValues.add(value);
}else {
final String[] words = valueText.split(" ");
final int wordCount = words.length;
for (int k = 0; k wordCount; k++) {
if (words[k].startsWith(prefixString)) {
newValues.add(value);
break;
}
}
}
}*/
results.values = newValues;
results.count = newValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if(Log.DEBUG.get()) {
Log.i(tag, "CityArrayFilter : publishResults results.values = "+results.values);
}
mObjects = (ListT) results.values;
if (results.count 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}