簡體   English   中英

GWT活動:添加了小部件以使用瀏覽器后退按鈕再次查看

[英]GWT Activities: Widget added to view again when using browser back button

以我的理解,如果我想動態地將小部件添加到使用UIBinder創建的視圖中,則可以在該視圖的演示者的活動的start方法中進行操作。

這是我的代碼:

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
    view = clientFactory.getDashboardView();
    view.setPresenter(this);

    ArrayList<Department> deps = ModelFactory.getDepartments();
    view.passData(deps); // Correct?
    panel.setWidget(view.asWidget());

}



public void passData(ArrayList<Department> departments) {

TextCell text = new TextCell();
CellList<String> cellList = new CellList<String>(text);
String[] departmentNames = new String[departments.size()];
for (int i = 0; i < departments.size(); i++) {
    departmentNames[i] = departments.get(i).getName();
}
cellList.setRowData(Arrays.asList(departmentNames));
departmentsDiv.add(cellList);

}

有用。 但是,當使用“后退”按鈕導航到上一個位置並返回時,將再次添加該小部件。

如何正確處理?

您有兩種選擇:

  1. 如果您不想在每次訪問此視圖時刷新數據,則需要在該視圖中添加一個標志,以告知數據是否已被填充。 然后,當再次訪問該視圖時,您的活動應調用view.passData(deps); 僅當標志設置為false時。 加載數據后,將標志設置為true。

  2. 如果您確實想在每次訪問時刷新數據,請在添加新的CellList之前先調用departmentsDiv.clear()

注意:更好的方法是在第一次顯示視圖時一次創建CellList,然后在新數據可用時僅調用setRowData

您正在使用Factory方法創建View對象。 您應該考慮在應用程序加載期間創建視圖,例如使用:GIN並將其標記為Singletons。 正確的方法是將它們作為start()方法參數傳遞,並僅在其上設置演示者引用。

總體思路是使Views單身。 應該在扔GWT場所(無狀態)的同時僅使用Singleton Views創建活動,以便可以保留視圖輸入數據。

在此處閱讀有關使用MVP / GIN模式的教程: http : //blog.hivedevelopment.co.uk/2009/08/google-web-toolkit-gwt-mvp-example.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM