我认为如果Adapter类似于Presenter,那么我应该创建Presenter来更新ListView,而不是使用Adapter。
在这种情况下,如何开发ListView?只需使用Adapter并继续使用MVP模式吗?
感谢您的阅读。
适配器是视图的一部分。事实上,所有Android依赖项都应该是视图的一部分。 将适配器与您的模型和Presenter隔离开来曾经是一项艰巨的任务。 我发布了一个名为PaperKnife的库,用于此目的。
您可以使用PaperKnife将适配器与模型和Presenter层解耦。按照以下步骤操作:
Abstract the model layer using CellElement
interface. Your view layer does't need to know your model.
Create a class to provide the information for your row view. You can use your presenter. Implements the class CellDataProvider
and create methods to provide all the information. Annotate your provider methods with @DataSource("DataId")
to perform the mapping. Your data methods receive the instance of your model class. For example:
public class SamplePresenterImpl implements SamplePresenter, CellDataProvider {
@DataSource("Title")
public String getTitle(Item item) {
return item.getTitle();
}
// etc.
}
Create a ViewHolder
in your adapter and implements the CellViewHolder
interface. Create methods to manage the views and use DataTarget("DataId")
static class ViewHolder extends CellViewHolder {
@DataTarget("Title")
public String setTitle(String title) {
mTextViewTitle.setText(title);
}
}
Execute the mapping in your adapter getView
method:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// etc.
PaperKnife.map(mList.get(position))
.dataProvider(mCellDataProvider)
.into(viewHolder);
return convertView;
}
这样,你的视图层只需要知道CellElement
接口,而你的Presenter则负责为适配器提供数据。