第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在模型更改時(shí)更新虛擬 TableViewer 的條目

在模型更改時(shí)更新虛擬 TableViewer 的條目

翻閱古今 2024-01-17 20:52:51
我目前正在重新編碼 TableViewer 以完全虛擬地工作。到目前為止,我對(duì)結(jié)果非常滿意,但仍然有一個(gè)問(wèn)題,即表中的所有可見(jiàn)元素都是在固定計(jì)時(shí)器上刷新的。但模型不斷變化。這意味著,如果我在定期更新發(fā)生之前單擊某個(gè)條目,則表會(huì)加載該位置的實(shí)際值,但保持所有其他元素不變。由于這就是為 TableViewer 設(shè)置的 LazyContentProvider 的工作方式,因此這不是什么大問(wèn)題。由于我的 TableViewer 是傳入事件的實(shí)時(shí)查看器,最新條目將所有其他項(xiàng)目向下移動(dòng),因此我想在添加新事件時(shí)刷新所有可見(jiàn)元素。我嘗試使用 TableViewer.refresh() 添加新項(xiàng)目,但這似乎沒(méi)有任何作用。由于完整的代碼非常復(fù)雜,并且是更大代碼段的一部分,我將提供代碼的基本表示:public class MyClass{  public TableViewer liveViewer;  public List<String> myItems=new ArrayList<>();  void init(){   liveViewer = new TableViewer(liveComp, SWT.BORDER | SWT.FULL_SELECTION | SWT.VIRTUAL);    liveViewer.setContentProvider(new LiveViewerContentProvider(liveViewer));    liveViewer.setLabelProvider(someLabelProvider);    liveViewer.setUseHashlookup(true);    ClassThatProvidesItems.addListener(new ItemAddedListener(){         @Override         void itemAdded(String item){          myItems.add(0,item);         }    }  }}public class LiveViewerContentProvider implements ILazyContentProvider{    private TableViewer viewer;    private List<String> input;    public LiveViewerContentProvider(TableViewer viewer) {        this.viewer = viewer;    }    @Override    public void dispose() {    }    @Override    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {        this.input = (List<String>) newInput;    }    @Override    public void updateElement(int index) {        viewer.replace(input.get(index), index);    }}我知道,ArrayList 可能不是最好的選擇,因?yàn)榭偸窃陬^部添加元素,但請(qǐng)暫時(shí)忽略它。我嘗試執(zhí)行 liveViewer.refresh(); 在偵聽(tīng)器回調(diào)結(jié)束時(shí),但它似乎沒(méi)有刷新我的元素。在添加新項(xiàng)目時(shí),我該怎么做才能強(qiáng)制刷新所有可見(jiàn)項(xiàng)目?
查看完整描述

1 回答

?
至尊寶的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

我剛剛注意到,我的解決方案幾乎有效。問(wèn)題是,整個(gè)代碼位于一個(gè)奇怪的 try-catch-block 中的某個(gè)地方,它只是默默地吞噬了異常,并且沒(méi)有給我無(wú)效的線程訪問(wèn)異常,而我應(yīng)該因?yàn)闆](méi)有在其中執(zhí)行 liveViewer.refresh 而得到該異常顯示線程。像這樣換行解決了問(wèn)題:


Display.getDefault().asyncExec(new Runnable() {

                    @Override

                    public void run() {

                        liveViewer.refresh();

                    }

                });


查看完整回答
反對(duì) 回復(fù) 2024-01-17
  • 1 回答
  • 0 關(guān)注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)