2016-04-05 35 views
0

我按照给予链接: Android ListView adapter with two ArrayLists如何使用两个不同大小的动态ArrayList在android中创建listview?

但在上述链路解决方案既数组列表添加到一个ArrayList中。可以请建议任何答案,因为我的要求如下:

要求:我从服务器获取数据都是不同的API,所以如何设置为解析后的列表视图?

请提出任何解决方案提前 感谢

+0

我假设你的东东d将不同的项目放入列表中。对?您可以创建一个额外的类,并只使用这两个需要使用的字段。另外,还有许多其他方法可以实现同样的目标。 –

+0

是的,你可以请分享任何链接 –

回答

1

有一些事情你可以在这种情况下,这样做:

  1. 你的数据模型中继承(或接口)模式,让抽象的数据为统一的类型并在使用时显示它getItemViewType确实区分数据

  2. 使用第三方库如mergelist并使用2个不同的适配器

1

当你的模型对两者都不相同时,你可以创建一个名为CustomInterface的接口并将它实现到你的两个模型中。然后在适配器,而不是模型,使用CustomInterface并在getView,你必须检查当前的模型,如:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
LayoutInflater theInflater = LayoutInflater.from(getContext()); 
View theView = theInflater.inflate(R.layout.custom_row, parent, false); 
if(entity instanceof Obj1){ 
    // Model 1 
} else if(entity instanceof Obj2){ 
    // Model 2 
} 
return theView; 
} 

记住,列表仅适用于同类集合。如果您有异构集合,则可以在所有模型上实现接口并创建接口列表,然后可以在该列表中放置实现相同接口的任何模型。

+0

谢谢亚西尔先生,现在我明白了。 –

+0

如果这解决了您的问题,请将其标记为正确答案 –

1

样品在这里。

  1. 接口

    public interface DataType { 
         String getTitle(); 
         String getAddress(); 
    } 
    
  2. 数据类

    public class AData implements DataType { 
        String titleA; 
        String addressA; 
    
        @Override 
        public String getTitle() { 
         return titleA; 
        } 
    
        @Override 
        public String getAddress() { 
         return addressA; 
        } 
    
        // getter & setter 
    } 
    
    public class BData implements DataType { 
        String titleB; 
        String addressB; 
    
        @Override 
        public String getTitle() { 
         return titleB; 
        } 
    
        @Override 
        public String getAddress() { 
         return addressB; 
        } 
    
        // getter & setter 
    } 
    
  3. 适配器

    public class CustomAdapter implements BaseAdapter { 
    
    List<DataType> arrayList; 
    
    // getCount... 
    
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
        // inflating views, bindings, reuse, etc 
    
        DataType data = arrayList.get(position); 
        textView.setText(data.getTitle()); 
        textView.setText(data.getAddress()); 
    
        // return ... 
    
    } 
    
相关问题