在回收者视图中使用自定义视图
Using custom view in recycler view
我发现我的项目需要从 ListView 转移到 RecyclerView。但是我在适配器实现方面遇到了一些问题。
在我当前的 ListView 实现中,我使用 CustomView 而不是在那里膨胀。这是我当前的 getView()
public View getView(int position, View containerRow, ViewGroup parent) {
return PanelViewFactory.createPanel(..)
}
但是在 RecyclerView 适配器中没有 getView() 方法。我们需要将这个自定义视图绑定到各自的视图持有者中。但是我怎么能在当前的实现中做到这一点,因为我没有在适配器中膨胀任何布局。视图 inflation 是在 PanelViewFactory 中完成的,我在这里只有视图实例。所以请帮我解决这个问题。
提前致谢
您将在 onCreateViewHolder 的回收适配器中充气,如下所示:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new view
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_row_layout, parent, false);
return new ViewHolder(view, this);
}
您可以在此处创建自定义视图。
您也可以在 RecyclerView.Adapter
中应用不同 ViewTypes
的模式。
第 1 步:在 onCreateViewHolder()
中创建自定义视图
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = PanelViewFactory.createPanel(..);
return new PanelViewHolder(view);
}
这里我假设您必须为您的自定义 PanelView
创建某种 ViewHolder
。如果您不需要 ViewHolder
,这很可能意味着您在当前实施中没有以最有效的方式做事,所以这是一个改进的好机会:)
第 2 步:在方法PanelViewHolder
中绑定数据
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
PanelViewHolder viewHolder = (PanelViewHolder)holder;
viewHolder.name.setText(...);
....
}
我发现我的项目需要从 ListView 转移到 RecyclerView。但是我在适配器实现方面遇到了一些问题。
在我当前的 ListView 实现中,我使用 CustomView 而不是在那里膨胀。这是我当前的 getView()
public View getView(int position, View containerRow, ViewGroup parent) {
return PanelViewFactory.createPanel(..)
}
但是在 RecyclerView 适配器中没有 getView() 方法。我们需要将这个自定义视图绑定到各自的视图持有者中。但是我怎么能在当前的实现中做到这一点,因为我没有在适配器中膨胀任何布局。视图 inflation 是在 PanelViewFactory 中完成的,我在这里只有视图实例。所以请帮我解决这个问题。
提前致谢
您将在 onCreateViewHolder 的回收适配器中充气,如下所示:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new view
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_row_layout, parent, false);
return new ViewHolder(view, this);
}
您可以在此处创建自定义视图。
您也可以在 RecyclerView.Adapter
中应用不同 ViewTypes
的模式。
第 1 步:在 onCreateViewHolder()
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = PanelViewFactory.createPanel(..);
return new PanelViewHolder(view);
}
这里我假设您必须为您的自定义 PanelView
创建某种 ViewHolder
。如果您不需要 ViewHolder
,这很可能意味着您在当前实施中没有以最有效的方式做事,所以这是一个改进的好机会:)
第 2 步:在方法PanelViewHolder
中绑定数据
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
PanelViewHolder viewHolder = (PanelViewHolder)holder;
viewHolder.name.setText(...);
....
}