ListViewDataSource¶
An abstract base class for a ListView
's data source.
To implement a custom list view data source, inherit from ListViewDataSource
and implement numberOfRows()
, viewForRowIndex()
, and heightForRowIndex()
. See the example below for reference.
Declaration¶
namespace bdn::ui {
class ListViewDataSource
}
Example¶
#include <bdn/String.h>
#include <bdn/ui/ListView.h>
#include <bdn/ui/ListViewDataSource.h>
class MyDataSource : public bdn::ListViewDataSource
{
public:
std::array<std::string, 2> _data = {"This is a test", "With only two lines of text"};
size_t numberOfRows(const std::shared_ptr<ListView>&) override { return 2; }
std::shared_ptr<View> viewForRowIndex(const std::shared_ptr<ListView>&,
size_t rowIndex,
std::shared_ptr<bdn::View> reusableView) override
{
auto label = std::dynamic_pointer_cast<bdn::Label>(reusableView);
if (!label) {
label = std::make_shared<bdn::Label>();
}
label->text = _data[rowIndex];;
return std::dynamic_pointer_cast<bdn::View>(label);
}
float heightForRowIndex(const std::shared_ptr<ListView>&, size_t rowIndex) override { return 25; }
};
// ...
auto listView = std::make_shared<bdn::ListView>();
listView->dataSource = std::make_shared<MyDataSource>();
listView->reloadData();
Implementing a Data Source¶
-
virtual size_t numberOfRows(const std::shared_ptr<ListView>& listView) = 0
Return the number of available rows in your data source implementation.
-
virtual std::shared_ptr<View> viewForRowIndex(const std::shared_ptr<ListView>& listView, size_t rowIndex, std::shared_ptr<View> reusableView) = 0
Return the item view for the given row index in your data source implementation.
-
virtual float heightForRowIndex(const std::shared_ptr<ListView>& listView, size_t rowIndex) = 0
Return the height of the row at the given row index in your data source implementation.
-
virtual bool shouldSelectRow(const std::shared_ptr<ListView>& listView, size_t rowIndex)
Return whether the user can select the specified row.
The default implementation returns
true
.