我在 Java 方面有点差,或者更确切地说是 OOP,我有一个奇怪的问题,我想知道这是否可能。我有课
private ArrayList<?> data;
public A(Activity a, ArrayList<?> mStatus)
{
activity = a;
data = mStatus;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
后来我用了
public View getView(int position, View convertView, ViewGroup parent)
{
View vi = convertView;
ViewHolder holder;
if (convertView == null)
{
vi = inflater.inflate(R.layout.custom_gallery, null);
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.image = (ImageView) vi.findViewById(R.id.image);
holder.root = (LinearLayout) vi.findViewById(R.id.root);
vi.setTag(holder);
}
else
holder = (ViewHolder) vi.getTag();
//I used this that solves my problem
if(data.get(position) instanceof GalleryTestParser)
{
GalleryTestParser mParser = (GalleryTestParser)data.get(position);
holder.text.setText(mParser.Name);
holder.image.setTag(mParser.galleryThumbiPad);
holder.root.setTag(mParser);
imageLoader.DisplayImage(mParser.galleryThumbiPad, activity, holder.image);
}
return vi;
}
编辑:如果数据是 GalleryTestParser 类型,或者如果不是做其他事情,我想要上面的内容。
早些时候我在尝试 ArrayList<GalleryTestParser> mStatus
在构造函数中,但这是特定于类的。我想要的是,我必须以某种方式从 arraylist 的对象知道它是什么类型,以便我将 cast arraylist 对象类型转换为该类型。
这可能吗?
最佳答案
试试这个
public A(Activity a, List<? extends GenericParser> mStatus)
然后从通用基础中继承不同类型的解析器。
不过要小心,如果你需要使用 instanceof 来区分它们,你可能做错了, 实际上只有解析器需要知道它是什么类型!
关于Java怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338474/