The code below creates 2 tabs. Each tab has a grid with 1 column. In the first tab the table header displays the dropdown with hide/show columns and sort. In the second tab the dropdown is missing from the table header.
What am I doing wrong? Thanks
public void onModuleLoad()
{
Grid table1 = createTable();
Grid table2 = createTable();
TabPanel tabPanel = new TabPanel();
tabPanel.add(table1, "Grid 1");
tabPanel.add(table2, "Grid 2");
RootLayoutPanel.get().add(tabPanel);
}
Grid createTable()
{
ColumnConfig<HashMap, String> nameCol = new ColumnConfig<HashMap, String>(
new ValueProvider<HashMap, String>()
{
@Override
public String getValue(HashMap object)
{
return (String) object.get("COL1");
}
@Override
public void setValue(HashMap object, String value)
{
object.put("COL1", value);
}
@Override
public String getPath()
{
// TODO Auto-generated method stub
return "1";
}
}, 200, SafeHtmlUtils.fromTrustedString("<b>Column 1</b>"));
List<ColumnConfig<HashMap, ?>> l = new ArrayList<ColumnConfig<HashMap, ?>>();
l.add(nameCol);
ColumnModel<HashMap> cm = new ColumnModel<HashMap>(l);
ModelKeyProvider<HashMap> modelKeyProvider = new ModelKeyProvider<HashMap>()
{
@Override
public String getKey(HashMap item)
{
return (String) item.get("COL1");
}
};
ListStore<HashMap> store = new ListStore<HashMap>(modelKeyProvider);
store.addAll(getStocks());
Grid table = new Grid(store, cm);
return table;
}
public static List<HashMap> getStocks()
{
List<HashMap> stocks = new ArrayList<HashMap>();
for (int i = 0; i < 1000; i++)
{
HashMap hashMap = new HashMap();
hashMap.put("COL1", "Line: " + i);
stocks.add(hashMap);
}
return stocks;
}
Looks like that the little button with the dropdown has 0 height. It must be because it's inside a tab that is not visible.
Refreshing the header solves this.
TabPanel tabPanel = new TabPanel();
tabPanel.addSelectionHandler(new SelectionHandler<Widget>()
{
@Override
public void onSelection(SelectionEvent<Widget> event)
{
if(table1.getView() != null && table1.getView().getHeader() != null)
table1.getView().getHeader().refresh();
}
});