Android开发 - (适配器)ArrayObjectAdapter类与Presenter实现类关联的作用解析
ListRowPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListRowPresenter());
- 用途:用于展示 ListRow 中的水平滚动列表项
ImageCardViewPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ImageCardViewPresenter());
- 用途:用于显示带有图像和标题的卡片视图。通常用于媒体内容展示
GridItemPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new GridItemPresenter());
- 用途:用于在网格视图中显示项目。适用于需要将项组织成网格的场景
VerticalGridPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VerticalGridPresenter());
- 用途:用于垂直网格视图。常用于显示需要垂直滚动的网格数据
CardPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CardPresenter());
- 用途:用于显示带有卡片样式的项。适用于简洁的视觉效果
AbstractCardPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CustomCardPresenter());
- 用途:用于创建自定义卡片视图的基类。开发者通常扩展此类来实现自定义卡片效果
PlaybackControlsRowPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new PlaybackControlsRowPresenter());
- 用途:用于在播放界面上显示控制按钮(如播放、暂停、停止等)。通常用于视频播放界面
PlaybackOverlayFragmentPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new PlaybackOverlayFragmentPresenter());
- 用途:用于显示视频播放覆盖层的 Presenter。通常在播放视频时显示控制界面
MoviePresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new MoviePresenter());
- 用途:通常是一个自定义的 Presenter,用于显示电影或其他媒体项目。根据具体的实现,它可能包括图像、标题和其他媒体信息
CompactTitlePresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CompactTitlePresenter());
- 用途:用于显示简化的标题视图。适合空间有限或需要简洁展示的场景
TextPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new TextPresenter());
- 用途:用于显示仅包含文本的简单视图项。适合展示简单的文本数据
ListPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ListPresenter());
- 用途:用于显示列表视图中的项目。可以是简单的列表或自定义列表
VerticalGridPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new VerticalGridPresenter());
- 用途:用于在垂直网格中显示项目。适用于需要显示多个项目的网格视图
SinglePresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new SinglePresenter());
- 用途:用于显示单个项。通常用于显示不需要滚动或网格的视图
GridPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new GridPresenter());
- 用途:用于在网格中显示项目。适合展示多个项目的场景
ImagePresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ImagePresenter());
- 用途:用于仅显示图像的视图项
HorizontalGridPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new HorizontalGridPresenter());
- 用途:用于水平网格视图
AbstractDetailsDescriptionPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new AbstractDetailsDescriptionPresenter() {
@Override
protected void onBindDescription(ViewHolder viewHolder, Object item) {
// 绑定详细描述到视图
}
});
- 用途:用于展示详细描述的视图,如电影或电视节目的详细信息
GuidedStepPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new GuidedStepPresenter());
- 用途:用于分步引导界面,适合在设置向导等场景中使用
SettingsPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new SettingsPresenter());
- 用途:用于展示设置界面的项
PosterPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new PosterPresenter());
- 用途:用于显示具有大图像和简要文本的项目,类似于海报视图
ActionPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ActionPresenter());
- 用途:用于展示带有行动按钮的视图,适合包含操作项的界面
FocusHighlightPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new FocusHighlightPresenter());
- 用途:用于处理焦点高亮的视图,允许自定义焦点状态下的视图样式
SubtitlePresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new SubtitlePresenter());
- 用途:用于显示带有字幕的视图,通常用于视频播放场景
CompactDetailsDescriptionPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CompactDetailsDescriptionPresenter());
- 用途:用于展示紧凑的详细描述,适合在空间有限的情况下展示重要信息
ActionPresenterSelector
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ActionPresenterSelector());
- 用途:用于选择不同的 ActionPresenter 实现,根据不同的上下文展示不同的行动按钮
ImageCardPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ImageCardPresenter());
- 用途:用于展示图像卡片,适合需要展示图像和简要文字的场景
DetailsOverviewRowPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new DetailsOverviewRowPresenter());
- 用途:用于展示详细信息视图的行,包含图像、标题和详细描述,适合详细信息页
ImageCardView
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new ImageCardView());
- 用途:用于显示图像卡片,包括图像和一些基本文本信息
SearchBarPresenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new SearchBarPresenter());
- 用途:用于展示搜索栏的视图,这对于需要搜索功能的应用非常有用
AbstractPresenter
import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.AbstractPresenter;
// 示例:你需要继承 AbstractPresenter 并实现具体的逻辑
public class CustomPresenter extends AbstractPresenter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
// 创建和返回视图
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
// 绑定数据到视图
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
// 清理视图
}
}
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CustomPresenter());
- 用途:一个抽象的基类,你可以从这个类继承并实现自己的
Presenter
。这通常用于创建完全自定义的视图
自定义 Presenter
import androidx.leanback.widget.Presenter;
import android.view.ViewGroup;
import android.view.View;
import android.widget.TextView;
public class CustomPresenter extends Presenter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
// 创建一个 TextView 用于显示内容
TextView textView = new TextView(parent.getContext());
return new ViewHolder(textView);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
// 绑定数据到视图
TextView textView = (TextView) viewHolder.view;
textView.setText(item.toString());
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
// 清理视图,一般不需要写什么东西
}
}
// 使用自定义 Presenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new CustomPresenter());
- 可以创建自定义的 Presenter 来实现特定的需求。自定义 Presenter 允许你完全控制数据如何显示以及视图的交互行为。选择合适的 Presenter 类型或自定义实现可以帮助你创建更灵活和符合用户需求的界面
高级自定义 Presenter
import androidx.leanback.widget.Presenter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.content.Context;
public class DynamicPresenter extends Presenter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent) {
Context context = parent.getContext();
TextView textView = new TextView(context);
textView.setPadding(16, 16, 16, 16);
return new ViewHolder(textView);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Object item) {
TextView textView = (TextView) viewHolder.view;
textView.setText(item.toString());
// 动态更新视图,例如根据数据变化更改背景色
textView.setBackgroundColor(item.hashCode() % 2 == 0 ? 0xFF0000FF : 0xFFFF0000);
}
@Override
public void onUnbindViewHolder(ViewHolder viewHolder) {
// 清理视图
}
}
// 使用动态更新的 Presenter
ArrayObjectAdapter adapter = new ArrayObjectAdapter(new DynamicPresenter());
- 如果需要显示具有特殊样式的项目,例如具有不同颜色和样式的文本和图像,可以创建自定义的 Presenter
总结
ArrayObjectAdapter 可以与多种 Presenter 实现类一起使用,每种实现类都具有特定的显示方式和用途。通过实例化不同的 Presenter 类,您可以控制数据项在界面上的展示效果,满足各种设计需求