Android - Java如何检查调用哪个类构造函数

时间:2018-01-19 18:32:41

标签: java android

我有以下类用于幻灯片放映图像使用sliderAdapter构造函数并传递一个字符串列表并且其工作正常。

public class sliderAdapter extends PagerAdapter {



    private Context context;

    private List<String> URLs = new ArrayList<>();
    sliderAdapter(Context context, List<String> URLs){
        this.URLs = URLs;
        this.context = context;
    }

    @Override
    public int getCount() {
        return URLs.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view== object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slideshow_layout,container,false);
        ImageView img = view.findViewById(R.id.imageview);
        Glide.with(context).load(URLs.get(position)).into(img);



        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }

}

现在我需要通过添加从drawable文件夹加载图像的功能来改进我的滑块,所以我必须传递整数列表,我不知道确切的方法做到这一点

据我所知,我应该创建接受整数列表的新构造函数 但是除了所有其他函数之外,我应该如何改变我的类以适应两个构造函数?

任何想法都将不胜感激

1 个答案:

答案 0 :(得分:2)

您可以这样做:

public class Item{
   String url;
   int id;
   boolean link = false;
   boolean resource = false;
   public Item(int id){
       this.id = id;
       resource = true;
   }
   public Item(String url){
       this.url = url;
       link = true;
   }
   public boolean isLink(){
       return link;
   }
   public boolean isResource(){
       return resource;
   }
   public int getId(){
       return id;
   }
   public String getUrl(){
       return url;
   }
}



public class sliderAdapter extends PagerAdapter {

    private Context context;

    private List<Item> items = new ArrayList<>();
    sliderAdapter(Context context, List<Item> items){
        this.items = items;
        this.context = context;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view== object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.slideshow_layout,container,false);
        ImageView img = view.findViewById(R.id.imageview);
        Item item = items.get(position);
        if(item.isLink()){
            Glide.with(context).load(item.getUrl()).into(img);
        }else{
            img.setImageResource(item.getId());
        }

        container.addView(view);
        return view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout)object);
    }
}

在此示例中,我没有将两个不同的列表传递给适配器(List<String>List<Integer>),而是将其更改为接受Item个对象的列表。如您所见,Item对象可以包含URL或可绘制资源ID。在适配器中,我检查每个项目以查看它是什么类型的项目,以便我可以使用适当的方法来设置ImageView的图像。