gpt4 book ai didi

java - 调用 `invalidateViews()` 后重新绘制项目时

转载 作者:太空宇宙 更新时间:2023-11-03 13:27:32 25 4
gpt4 key购买 nike

调用 invalidateViews() 后项目何时重绘?

我问是因为我尝试在 bg-thread 通知图像 rsc 下载后刷新 listItems

但没有任何更新。只有在退出并重新进入后才会绘制新图标。

我有一个 adapter 类型的 Activity SettingValueAdapter extends BaseAdapter

它有一个成员:

私有(private) SettingsValue[] 值;

它有两个有趣的方法:

            @Override
public View getView(int position, View view, ViewGroup parent) {

AddressItem ai= (AddressItem)getItem(position);
DriveToNativeManager dnm = DriveToNativeManager.getInstance();


if (view == null) {
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = li.inflate(R.layout.address_item, null);
}

view.setTag(R.id.addressItem,ai);
view.setTag(position);
view.findViewById(R.id.fullAddressItemCol).setVisibility(View.VISIBLE);
view.findViewById(R.id.addressItemTouch).setVisibility(View.GONE);
view.findViewById(R.id.addressItemImage).setVisibility(View.GONE);

if (ai != null) {
...
}
view.findViewById(R.id.addressItemIconLayout).setVisibility(View.VISIBLE);
Drawable icon = ResManager.GetSkinDrawable(ai.getIcon() + ".bin");
((ImageView)view.findViewById(R.id.addressItemIcon)).setImageDrawable(icon);

..
}
}


public void refreshListIcons() {


// NativeManager nativeManager = AppService.getNativeManager();
// SettingsValue[] values = new SettingsValue[categories.length];
// for (int i = 0; i < categories.length; i++) {
// values[i] = new SettingsValue(categories[i].value, nativeManager.getLanguageString(categories[i].displayString), false);
// values[i].icon = ResManager.GetSkinDrawable(categories[i].iconName + ".bin");
// }
// adapter.setValues(values);


this.runOnUiThread(new Runnable() {

@Override
public void run() {
adapter.notifyDataSetChanged();
}
});


}

我在bg-thread(c语言)图片下载过程中附加了一个回调。

回调切换到 ui 线程并调用此 refreshList:

public void refreshSearchIconsOnSearchActivity() {

Runnable refreshViewEvent = new Runnable() {
@Override
public void run() {
Activity currentActivity = AppService.getActiveActivity();

if (currentActivity instanceof SearchActivity) {

Log.d("w", "refreshSearchIconsOnSearchActivity callback running in thread "
+ Thread.currentThread().getId() );
//results list
((SearchActivity) currentActivity).refreshList();

}
}
};
AppService.Post(refreshViewEvent);
}

但是,图片已完成下载,不会在 Activity 中刷新。

它们只有在我离开并重新进入 Activity 时才会刷新。

我错过了什么?

最佳答案

InvalidateViews 只会导致 listView 重绘自身。它不会调用 getView 来这样做,它只是重置屏幕上的当前 View - 基本上它只是这样做

for(View child: getChildren()){
child.invalidate();
}

如果要更新列表,请在适配器上调用 notifyDataSetChanged。

关于java - 调用 `invalidateViews()` 后重新绘制项目时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com