Android 在同一适配器中填充不同类型的arraylist
我正在使用Android 在同一适配器中填充不同类型的arraylist,android,android-recyclerview,Android,Android Recyclerview,我正在使用RecyclerView,在3个活动中,RecyclerView的适配器和XML是相同的。问题出在getItemCount()中,因为同一适配器中填充了3种不同类型的ArrayList 如何将不同类型的ArrayList与同一适配器一起使用?我建议您构建一个由您创建的3个ArrayList扩展实现的接口,该接口包含回收器适配器所需的方法。我建议您构建一个由您创建的3个ArrayList扩展实现的接口其中包含回收器适配器所需的方法。首先需要创建3个Getter Setter。例如 Mod
RecyclerView
,在3个活动中,RecyclerView
的适配器和XML是相同的。问题出在getItemCount()
中,因为同一适配器中填充了3种不同类型的ArrayList
如何将不同类型的
ArrayList
与同一适配器一起使用?我建议您构建一个由您创建的3个ArrayList扩展实现的接口,该接口包含回收器适配器所需的方法。我建议您构建一个由您创建的3个ArrayList扩展实现的接口其中包含回收器适配器所需的方法。首先需要创建3个Getter Setter。例如
ModelA
,ModelB
,ModelC
现在创建一个接受任何类型类对象的Object
数组列表。e、 g
ArrayList<Object> objectList = new ArrayList<>();
这对您很有用,因为所有视图都有相同的布局,否则您必须使用
视图类型首先需要创建3个Getter Setter。例如
ModelA
,ModelB
,ModelC
现在创建一个接受任何类型类对象的Object
数组列表。e、 g
ArrayList<Object> objectList = new ArrayList<>();
这对您很有用,因为您对所有视图都有相同的布局,否则您必须使用ViewTypes
此适配器类实现可以让您了解您想要实现的目标
class GenericAdapter extends RecyclerView.Adapter<GenericAdapter.ViewHolder> {
private List<?> data;
GenericAdapter(List<?> data) {
this.data = data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
...
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bindData(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
...
...
ViewHolder(View itemView) {
super(itemView);
// bind the view references
...
...
}
void bindData(Object data) {
if (data instanceof Model1) {
// bind data for model class 1
...
...
} else if (data instanceof Model2) {
// bind data for model class 2
...
...
} else if (data instanceof Model3) {
// bind data for model class 3
...
...
}
}
}
}
类GenericaAdapter扩展了RecyclerView.Adapter{
私人名单数据;
通用适配器(列表数据){
这个数据=数据;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
...
...
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.bindData(data.get(position));
}
@凌驾
public int getItemCount(){
返回data.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
...
...
ViewHolder(视图项视图){
超级(项目视图);
//绑定视图引用
...
...
}
void bindData(对象数据){
if(模型1的数据实例){
//绑定模型类1的数据
...
...
}else if(Model2的数据实例){
//绑定模型类2的数据
...
...
}else if(Model3的数据实例){
//绑定模型类3的数据
...
...
}
}
}
}
此适配器类实现可以让您了解想要实现的目标
class GenericAdapter extends RecyclerView.Adapter<GenericAdapter.ViewHolder> {
private List<?> data;
GenericAdapter(List<?> data) {
this.data = data;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
...
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bindData(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
...
...
ViewHolder(View itemView) {
super(itemView);
// bind the view references
...
...
}
void bindData(Object data) {
if (data instanceof Model1) {
// bind data for model class 1
...
...
} else if (data instanceof Model2) {
// bind data for model class 2
...
...
} else if (data instanceof Model3) {
// bind data for model class 3
...
...
}
}
}
}
类GenericaAdapter扩展了RecyclerView.Adapter{
私人名单数据;
通用适配器(列表数据){
这个数据=数据;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
...
...
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
holder.bindData(data.get(position));
}
@凌驾
public int getItemCount(){
返回data.size();
}
类ViewHolder扩展了RecyclerView.ViewHolder{
...
...
ViewHolder(视图项视图){
超级(项目视图);
//绑定视图引用
...
...
}
void bindData(对象数据){
if(模型1的数据实例){
//绑定模型类1的数据
...
...
}else if(Model2的数据实例){
//绑定模型类2的数据
...
...
}else if(Model3的数据实例){
//绑定模型类3的数据
...
...
}
}
}
}
getItemCount()的问题是什么?
请进一步解释您的问题并提供一些代码。3种不同类型的ArrayList是什么意思?其中包含的对象是每个对象的不同类的实例吗?检查这是否有帮助。我的意思是说我有3个不同的模型类每个arraylist都是特定的模型类类型(泛型)。getItemCount()
有什么问题吗?请进一步解释一下您的问题并提供一些代码。3个不同类型的arraylist是什么意思?其中包含的对象是每个对象的不同类的实例吗?我的意思是说我有3个不同的模型类,每个arraylist都是特定的模型类类型(泛型)。