首页 文章

Android:用于不同自定义对象的自定义ArrayAdapter

提问于
浏览
2

我有许多自定义对象彼此显着不同 . 这些对象存储在不同的列表中,并显示在不同的ListView中 . 由于这些ListView的设计,我需要创建自己的自定义ArrayAdapter . 问题是,无论列表中的对象如何,ListView设计对于所有ListView都应该是相同的 .

为此,我为每种类型的对象创建了一个ArrayAdapter . 例如 . 对于自定义对象coA我做了一个ArrayAdapter coAAdapter,而对于自定义对象coB我做了一个ArrayAdapter coBAdapter . 这似乎对我来说是非常不必要的,因为除了自定义适配器扩展的ArrayAdapter及其构造函数之外,这些适配器之间几乎没有区别:

CoA类适配器:

public class CoAAdapter extends ArrayAdapter<CoA> {
     public CoAAdapter (Context context, int resource, List<CoA> objects) {...}
}

CoB级适配器:

public class CoBAdapter extends ArrayAdapter<CoB> {
     public CoBAdapter (Context context, int resource, List<CoB> objects) {...}
}

这是应该如何使用自定义ArrayAdapter,还是有办法使这个设计更简单,比如为所有自定义对象设置一个自定义ArrayAdapter?

我考虑过一些不同的解决方案,比如创建一个通用的自定义适配器或通过为我的自定义对象创建一个公共基类来使用继承,但经过一些研究,这些似乎都不是一个好方法 .

3 回答

  • 0

    您可以像这样定义适配器:

    public class MyArrayAdapter<T> extends ArrayAdapter<T> 
     {
          HashMap<T, Integer> mIdMap = new HashMap<T, Integer>();
    
          public MyArrayAdapter(Context context, int textViewResourceId, List<T> objects) {
            super(context, textViewResourceId, objects);
            for (int i = 0; i < objects.size(); ++i) {
              mIdMap.put(objects.get(i), i);
            }
          }
      }
    
  • 0

    可能你想使用 BaseAdapter . 在该适配器的 getView() 中,检查对象的 instanceof ,做相应的事情 .

  • 3
    public interace SomeInterface
    {
        public String getString();
    }
    
    public class classA implements SomeInterface
    {
        ...
    
        @Override
        public String getString()
        {
            return "blabla";
        }
    }
    
    public class classB implements SomeInterface
    {
        ...
    
        @Override
        public String getString()
        {
            return "whatever";
        }
    }
    
    public class InterfaceAdapter extends ArrayAdapter<SomeInterface> 
    {
         public InterfaceAdapter (Context context, int resource, List<SomeInterface> objects) {...}
    }
    

相关问题